为了账号安全,请及时绑定邮箱和手机立即绑定

GoLang:给定公共 RSA 密钥的 ssh 客户端配置

GoLang:给定公共 RSA 密钥的 ssh 客户端配置

Go
动漫人物 2023-03-07 17:13:02
我需要在给定公共 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认证的价值在于私钥永远不会离开系统;无需通过电线传输任何敏感信息。


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信