Reputation: 17411
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?
Upvotes: 3
Views: 7179
Reputation: 131
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)
}
}
Upvotes: 4
Reputation: 99236
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.
Upvotes: 3