• golang ssh 远程执行命令(有一些命令会报command not found)



    func sshSession(user, password, host string, port int) (sshSession *ssh.Session, err error) { //参数: 远程服务器用户名, 密码, ip, 端口
    sshClient, err := connector(user, password, host, port) //连接ssh
    if err != nil {
    fmt.Println("连接ssh失败", err)
    return
    }

    if sshSession, err = sshClient.NewSession(); err != nil { //创建客户端
    fmt.Println("创建客户端失败", err)
    return
    }

    return
    }

    func connector(user, password, host string, port int) (sshClient *ssh.Client, err error) {
    auth := make([]ssh.AuthMethod, 0)
    auth = append(auth, ssh.Password(password))

    clientConfig := &ssh.ClientConfig{
    User: user,
    Auth: auth,
    Timeout: 30 * time.Second,
    HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
    return nil
    },
    }

    addr := host + ":" + strconv.Itoa(port)
    sshClient, err = ssh.Dial("tcp", addr, clientConfig) //连接ssh
    if err != nil {
    fmt.Println("连接ssh失败", err)
    return
    }

    return
    }

    func main() {
    //session, err := go_utils.SshSession("root", "ubZFVU9RSKcTuTZe", "47.107.94.236", 22)
    session, err := go_utils.SshSession("root", "Xu765529", "47.92.199.4", 22)
    if err != nil {
    log.Fatal(err)
    }
    defer session.Close()

    session.Stdout = os.Stdout
    session.Stderr = os.Stderr
    session.Stdin = os.Stdin
    err = session.Run("/usr/local/start.sh") //脚本路径
    if err != nil {
    fmt.Println(err)
    }
    }


    看一下脚本内容:

    在服务器上直接运行脚本:

    hello world 和 2个java的版本号, 然而程序运行的实际情况:

    有一个java命令报command not found, 是因为ssh在连接远程的环境变量中不包含可执行文件的路径, 所以要自己加上路径



  • 相关阅读:
    linux命令(3)top
    linux命令(2)vmstat
    学习okhttp wiki--Connections.
    你可以更幸福(转载)
    Android中多表的SQLite数据库(译)
    怎样写有效的设计文档(译)
    Material Design说明
    Android原生Calendar代码阅读(一)
    Android Studio tips and tricks 翻译学习
    Material Calendar View 学习记录(二)
  • 原文地址:https://www.cnblogs.com/-xuzhankun/p/11114909.html
Copyright © 2020-2023  润新知