我需要在给定公共 RSA 密钥的情况下启动到远程主机的 ssh 连接。我到目前为止的代码如下func sftpClient(host, port, user, pass string) (*sftp.Client, error) { var authMethod ssh.AuthMethod if strings.Index(pass, "-----BEGIN RSA PRIVATE KEY-----") == 0 { signer, err := ssh.ParsePrivateKey([]byte(pass)) if err != nil { return nil, err } authMethod = ssh.PublicKeys(signer) } else if strings.Index(pass, "---- BEGIN SSH2 PUBLIC KEY ----") == 0 { publicKey, err := ssh.ParsePublicKey([]byte(pass)) if err != nil { return nil, err } authMethod = ??? } else { authMethod = ssh.Password(pass) } config := &ssh.ClientConfig{ User: user, Auth: []ssh.AuthMethod{authMethod}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), Config: ssh.Config{ Ciphers: []string{ // some ciphers here }, }, } conn, err := ssh.Dial("tcp", host+":"+port, config) if err != nil { return nil, err } client, err := sftp.NewClient(conn) if err != nil { return nil, err } return client, nil}基于密码的身份验证和基于私钥的身份验证工作得很好,因为 ssh 库提供了这些包装器(ssh.Password并且ssh.PublicKeys创建了某种包装器AuthMethod)。我没有尝试很多,因为我找不到很多选择:authMethod = ssh.NewPublicKey(publicKey)authMethod = publicKey它们都不起作用。我还尝试使用不同的方法解析公钥,但这也失败了。我使用的方法是ssh.ParseAuthorizedKey这个 - 类似于ss.ParsePublicKeyreturn aPublicKey显然不能用作身份验证方法。所以我的问题是:如何使用给定的公共RSA 密钥在 Go 上启动 ssh 客户端?
1 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
如何使用给定的公共 RSA 密钥在 Go 上启动 ssh 客户端?
您不能使用公钥来验证 ssh 客户端。您将公钥提供给服务器,然后客户端使用私钥进行身份验证。
ssh key认证的价值在于私钥永远不会离开系统;无需通过电线传输任何敏感信息。
- 1 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消