golang ssh 远程执行命令(有一些命令会报command not found) - Go语言中文社区

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在连接远程的环境变量中不包含可执行文件的路径, 所以要自己加上路径

 



转载于:https://www.cnblogs.com/-xuzhankun/p/11114909.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_30920513/article/details/99895612
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 17:55:39
  • 阅读 ( 894 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢