dro7152
dro7152
2014-10-17 23:28

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

已采纳

I have 50 something Linux machines (RHEL). I want to run some commands on these machines from a go script running on a central machine. I have setup password-less ssh authentication to all of them from the central machine to all the remote machines. Though I'm open to non-ssh solutions too, though something secure is preferred.

The commands being run would change over time. I would also want to process the output and return codes of commands being run on the remote machines in my script running on central machine.

I only found this ssh package, which supports only password authentication method, which is not good enough.

Any other options?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • doudu161481 doudu161481 7年前

    You can use public keys with the go.crypto/ssh package using PublicKeys.

    There's a detailed example in the repo around line 114.

    Another example using ssh agent @ https://github.com/davecheney/socksie/blob/master/main.go.

    点赞 评论 复制链接分享
  • dsxrq28228 dsxrq28228 6年前

    You just can use this package https://github.com/hypersleep/easyssh

    For example you can call ps ax remotely:

    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)
        }
    }
    
    点赞 评论 复制链接分享