我使用crypto/ssh
包生成了SSH RSA密钥对。但是,当我尝试通过Go中的脚本使用它时,我收到错误:
无法连接:ssh:握手失败:ssh:无法进行身份验证, 尝试方法[none publickey],不支持任何方法
当我通过CLI连接到远程设备时,它成功连接:
ssh -i ~/.ssh/test_key_1 username@172.22.4.1
我可能错误地使用了包吗?
注意:私钥没有密码。
package main
import (
"golang.org/x/crypto/ssh"
"io/ioutil"
"log"
)
func main() {
privateKeyFile := "/Users/username/.ssh/test_key_1"
remoteIP := "172.22.4.1:22"
user := "username"
privateKeyBytes, err := ioutil.ReadFile(privateKeyFile)
if err != nil {
log.Fatal(err)
}
key, err := ssh.ParsePrivateKey(privateKeyBytes)
if err != nil {
log.Fatal(err)
}
config := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
// Use the PublicKeys method for remote authentication.
ssh.PublicKeys(key),
},
// using InsecureIgnoreHostKey() for testing purposes
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
client, err := ssh.Dial("tcp", remoteIP, config)
if err != nil {
log.Fatalf("unable to connect: %v", err)
}
defer client.Close()
fmt.Println("Success!")
}
答案 0 :(得分:2)
经过漫长的组件隔离过程后,我终于能够验证为什么我的密钥对没有进行身份验证。这是因为我正在使用的自定义connivence包正在略微关闭公钥。
我发布了一个未解决的问题:
https://github.com/ianmcmahon/encoding_ssh/issues/1
简而言之:
使用EncodePublicKey()
函数创建的公钥如下:(为简洁而截断)
ssh-rsa AAAAB3NzaC1yc2EAAAA EAAEAAQAAAg C2u3I / nbN9jcWDV ..
但是,当运行ssh-keygen -y -f id_rsa
时,会创建以下内容:
ssh-rsa AAAAB3NzaC1yc2EAAAA DAQABAAACAQ C2u3I / nbN9jcWDV ...
注意粗体位略有不同。这会导致SSH身份验证无效。