3

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 Answers 2

4

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)
    }
}
Sign up to request clarification or add additional context in comments.

Comments

3

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.

1 Comment

So it's a documentation bug then. :) Currently only // the "password" authentication method is supported

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.