使用 SSH 和 Golang 中的密钥连接到服务器可以通过 ssh 包来实现。操作方法如下:
Dial 功能需要一个 ssh.AuthMethod 实例,可以使用 ssh.PublicKeys 从 SSH 密钥创建该实例。要从 PEM 字节获取签名者,请使用 ssh.ParsePrivateKey。
要使用私钥的 Signers 字段,可以使用 ssh.PublicKeys(signers...) 作为身份验证方法。
示例代码:
<code class="go">import ( "log" "net" "os" "github.com/gliderlabs/ssh" ) func main() { 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) } 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!") }</code>
此代码模仿 ssh -i x.pem user@host 命令,使用提供的密钥与指定服务器建立 SSH 会话。您现在可以通过会话变量在服务器内执行命令。
以上是如何使用 Go 中的密钥 SSH 到 Linux 服务器?的详细内容。更多信息请关注PHP中文网其他相关文章!