我需要在給定公共 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 關注
- 297 瀏覽
添加回答
舉報
0/150
提交
取消