golang:在远程服务器上执行shell命令

时间:2014-10-17 23:28:51

标签: ssh go remote-access

我有50台Linux机器(RHEL)。我想在中央机器上运行的go脚本上运行这些机器上的一些命令。我已经为从中央计算机到所有远程计算机的所有人设置了无密码ssh身份验证。虽然我也对非ssh解决方案持开放态度,但首选安全措施。

正在运行的命令会随着时间而改变。我还想处理在中央机器上运行的脚本中在远程机器上运行的命令的输出和返回代码。

我只发现了这个ssh package,它只支持密码验证方法,这还不够好。

还有其他选择吗?

2 个答案:

答案 0 :(得分:3)

您可以使用PublicKeys使用包含go.crypto/ssh包的公钥。

在第114行的repo中有一个详细的例子。

使用ssh agent @ https://github.com/davecheney/socksie/blob/master/main.go的另一个例子。

答案 1 :(得分:2)

您可以使用此资料包https://github.com/hypersleep/easyssh

例如,您可以远程调用ps ax

package main

import (
    "fmt"
    "github.com/hypersleep/easyssh"    
)

func main() {
    ssh := &easyssh.MakeConfig {
        User: "core",
        Server: "core",
        Key: "/.ssh/id_rsa",
        Port: "22",
    }

    response, err := ssh.Run("ps ax")
    if err != nil {
        panic("Can't run remote command: " + err.Error())
    } else {
        fmt.Println(response)
    }
}