从ssh运行命令时,我试图获取错误信息。这是示例:
package main
import (
"golang.org/x/crypto/ssh"
"net"
)
func main() {
config := &ssh.ClientConfig{
User: "xx",
Auth: []ssh.AuthMethod{
ssh.Password("xxx"),
},
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
}
sshClient, err := ssh.Dial("tcp", "x.x.x.x:22", config)
if err != nil {
panic(err.Error())
}
session, err := sshClient.NewSession()
if err != nil {
panic(err.Error())
}
data, err := session.CombinedOutput("ls2")
if err != nil {
// This prints : error = Process exited with status 127
// Pos1
print("error = " + err.Error())
return
}
// Pos2
content := string(data)
println(content)
}
我测试了错误的命令:ls2,并且我想在Pos2上获取实际的错误信息“ -bash:ls2:找不到命令”。但是该测试程序在Pos1失败,并显示“错误=进程退出,状态为127”,这不是我想要的,因为我需要实际信息。
答案 0 :(得分:0)
尝试这样
session, err := sshClient.NewSession()
if err != nil {
panic(err.Error())
}
defer session.Close()
data, err := session.CombinedOutput("ls2")
if err != nil {
if v, ok := err.(*ssh.ExitError); ok {
fmt.Println(v.Msg())
}
}
fmt.Println(string(data))
并输出command not found: ls2