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

我需要在给定公共 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 客户端?


动漫人物
浏览 252回答 1
1回答

繁星点点滴滴

如何使用给定的公共 RSA 密钥在 Go 上启动 ssh 客户端?您不能使用公钥来验证 ssh 客户端。您将公钥提供给服务器,然后客户端使用私钥进行身份验证。ssh key认证的价值在于私钥永远不会离开系统;无需通过电线传输任何敏感信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go