GO-通过ssh连接执行命令时出现未知错误

GO-通过ssh连接执行命令时出现未知错误,ssh,go,runtime-error,Ssh,Go,Runtime Error,我试图通过ssh连接通过session.Run()函数执行命令。到目前为止,我可以成功地执行一些命令,但在其他命令上,我不断收到以下错误:“进程已退出:1。原因是:()退出状态1” 命令输出(session.Stdout)是我期望的: "# On branch master nothing to commit, working directory clean" 需要注意的是,我已经尝试直接在控制台上执行该命令,而且效果很好 因此,代码似乎是好的,命令在远程上运行,但无论发生什么,我仍然有一个

我试图通过ssh连接通过session.Run()函数执行命令。到目前为止,我可以成功地执行一些命令,但在其他命令上,我不断收到以下错误:“进程已退出:1。原因是:()退出状态1”

命令输出(session.Stdout)是我期望的:

 "# On branch master nothing to commit, working directory clean"
需要注意的是,我已经尝试直接在控制台上执行该命令,而且效果很好

因此,代码似乎是好的,命令在远程上运行,但无论发生什么,我仍然有一个错误

有人知道为什么会这样吗


提前谢谢。

也许我的图书馆会对你有所帮助:;它涵盖了在一个会话中运行ssh命令的基本情况

请尝试以下操作:

handler := func(outputType int, message string) {
    if(outputType == shell.Stdout) {
        log.Println("stdout: ", message)
    } else if(outputType == shell.Stdout) {
        log.Println("stderr: ", message)
    }
}

key, err := ssh.ParsePrivateKey([]byte(YOUR_PRIVATE_KEY))
if(err != nil) {
    panic(err)
}

auth := []ssh.AuthMethod{ssh.PublicKeys(key)}
shell = shell.NewRemote(shell.RemoteConfig{
    Host: "root@example.com:22",
    Auth: auth,
})

if(err != nil) {
    panic(err)
}

status, err := shell.Run("cd ~/www/www/", handler)
if(err != nil) {
    panic(err)
}

status, err := shell.Run("git commit -m 'on the beginning was the commit'", handler)
if(err != nil) {
    panic(err)
}

if(status == 0) {
    console.log("command executed successfully")
} else {
    console.log("command execution failed")
}

也许我的图书馆会对你有所帮助:;它涵盖了在一个会话中运行ssh命令的基本情况

请尝试以下操作:

handler := func(outputType int, message string) {
    if(outputType == shell.Stdout) {
        log.Println("stdout: ", message)
    } else if(outputType == shell.Stdout) {
        log.Println("stderr: ", message)
    }
}

key, err := ssh.ParsePrivateKey([]byte(YOUR_PRIVATE_KEY))
if(err != nil) {
    panic(err)
}

auth := []ssh.AuthMethod{ssh.PublicKeys(key)}
shell = shell.NewRemote(shell.RemoteConfig{
    Host: "root@example.com:22",
    Auth: auth,
})

if(err != nil) {
    panic(err)
}

status, err := shell.Run("cd ~/www/www/", handler)
if(err != nil) {
    panic(err)
}

status, err := shell.Run("git commit -m 'on the beginning was the commit'", handler)
if(err != nil) {
    panic(err)
}

if(status == 0) {
    console.log("command executed successfully")
} else {
    console.log("command execution failed")
}

为什么不获取shell命令的输出并查看错误是什么?很好地观察到了,我忘记了这一点。输出是:“#在分支主机上无需提交任何内容,工作目录干净”这正是应该的内容。但是错误仍然存在=/然后这是预期的结果,因为git返回的退出代码为1。同样的事情也发生在你的终端上,你只是没有检查出口代码。我明白你的意思,这似乎是正确的。但这听起来不是有点奇怪吗?退出1是不成功的退出,对吗?我应该在检查错误时忽略这个特定的错误消息吗?这与Go或ssh无关,只是当您尝试提交时,git以1退出,而没有什么要提交的。您或者需要先检查要提交的内容(可能是类似于
git status--civille
),或者检查这个特定的错误和退出代码。为什么不获取shell命令的输出并查看错误是什么?很好地观察到了,我忘了这一点。输出是:“#在分支主机上无需提交任何内容,工作目录干净”这正是应该的内容。但是错误仍然存在=/然后这是预期的结果,因为git返回的退出代码为1。同样的事情也发生在你的终端上,你只是没有检查出口代码。我明白你的意思,这似乎是正确的。但这听起来不是有点奇怪吗?退出1是不成功的退出,对吗?我应该在检查错误时忽略这个特定的错误消息吗?这与Go或ssh无关,只是当您尝试提交时,git以1退出,而没有什么要提交的。您要么需要首先检查要提交的内容(可能类似于
git-status--chinese
),要么检查此特定错误并退出代码。