Go Lang执行/生成一个ssh会话

时间:2014-03-20 09:46:36

标签: ssh go fork lang

我试图找出分叉/启动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()

}

2 个答案:

答案 0 :(得分:4)

cmd.Run等待命令完成。您的ssh会话应该(通常)在没有用户交互的情况下退出。因此,程序会阻塞,因为它等待ssh进程完成。

您可能想要

  • 还重定向Stdin,因此您可以与ssh会话进行交互
  • 执行ssh me@server somecommand。在最后一种形式中,执行特定命令并重定向该命令的输出。
  • 查看ssh package

答案 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 }) 上执行后续命令。