我需要在給定公共 RSA 密鑰的情況下啟動(dòng)到遠(yuǎn)程主機(jī)的 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}基于密碼的身份驗(yàn)證和基于私鑰的身份驗(yàn)證工作得很好,因?yàn)?ssh 庫(kù)提供了這些包裝器(ssh.Password并且ssh.PublicKeys創(chuàng)建了某種包裝器AuthMethod)。我沒有嘗試很多,因?yàn)槲艺也坏胶芏噙x擇:authMethod = ssh.NewPublicKey(publicKey)authMethod = publicKey它們都不起作用。我還嘗試使用不同的方法解析公鑰,但這也失敗了。我使用的方法是ssh.ParseAuthorizedKey這個(gè) - 類似于ss.ParsePublicKeyreturn aPublicKey顯然不能用作身份驗(yàn)證方法。所以我的問題是:如何使用給定的公共RSA 密鑰在 Go 上啟動(dòng) ssh 客戶端?
GoLang:給定公共 RSA 密鑰的 ssh 客戶端配置
動(dòng)漫人物
2023-03-07 17:13:02