使用SSH和带有golang的pem /密钥连接到服务器
我正在尝试使用Go编程语言的[ssh] [1]包通过密钥连接到Amazon AWS AWS
Linux服务器。但是,软件包文档有些含糊/令人困惑。有谁知道如何通过使用密钥的ssh进行连接,或者至少在可能的情况下?令我困扰的是[Dial]
[3]示例中的内容
// An SSH client is represented with a ClientConn. Currently only// the "password" authentication method is supported.
我基本上想模仿ssh -i x.pem root@server.com的行为,并在服务器内部执行命令(例如whoami
)
回答:
您需要使用ssh.PublicKeys
将列表ssh.Signers
转换成ssh.AuthMethod
。您可以使用从pem字节ssh.ParsePrivateKey
获取a
Signer
,或者如果需要使用rsa,dsa或ecdsa私钥,则可以将其提供给ssh.NewSignerFromKey
。
这也是一个在代理支持下充实的示例(因为使用代理通常是仅使用密钥文件之后的下一步)。
sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))if err != nil {
log.Fatal(err)
}
agent := agent.NewClient(sock)
signers, err := agent.Signers()
if err != nil {
log.Fatal(err)
}
// or get the signer from your private key file directly
// signer, err := ssh.ParsePrivateKey(pemBytes)
// if err != nil {
// log.Fatal(err)
// }
auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}
cfg := &ssh.ClientConfig{
User: "username",
Auth: auths,
}
cfg.SetDefaults()
client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
if err != nil {
log.Fatal(err)
}
session, err = client.NewSession()
if err != nil {
log.Fatal(err)
}
log.Println("we have a session!")
...
以上是 使用SSH和带有golang的pem /密钥连接到服务器 的全部内容, 来源链接: utcz.com/qa/422400.html