我试图找出分叉/启动ssh终端会话的机制 即如果我执行此程序,我想登录远程服务器(我的密钥在服务器上)。
现在它只是执行但没有任何反应。
package main
import (
"os/exec"
"os"
)
func main() {
cmd := exec.Command("ssh","root@SERVER-IP")
cmd.Stdout = os.Stdout
//cmd.Stderr = os.Stderr
cmd.Run()
}
答案 0 :(得分:4)
cmd.Run
等待命令完成。您的ssh会话应该(通常)在没有用户交互的情况下退出。因此,程序会阻塞,因为它等待ssh
进程完成。
您可能想要
ssh me@server somecommand
。在最后一种形式中,执行特定命令并重定向该命令的输出。答案 1 :(得分:-1)
我已经完成了可以涵盖您的要求的图书馆:https://github.com/shagabutdinov/shell;结帐是否有帮助。
您可以使用此库启动ssh会话并执行命令:
(almost there, just the NULL branch name)
这是golang ssh库的简单包装,有助于在key, err := ssh.ParsePrivateKey([]byte(YOUR_PRIVATE_KEY))
if(err != nil) {
panic(err)
}
shell, err = shell.NewRemote(shell.RemoteConfig{
Host: "root@example.com:22",
Auth: []ssh.AuthMethod{ssh.PublicKeys(key)},
})
if(err != nil) {
panic(err)
}
shell.Run("cat /etc/hostname", func(_ int, message string) {
log.Println(message) // example.com
})
上执行后续命令。