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在連接遠程的環境變量中不包含可執行文件的路徑, 所以要自己加上路徑

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM