我正在尝试使用Go连接到远程服务器。这就是我正在使用的:(SSH Handshake complains about missing host key)
key, err := ioutil.ReadFile("/Users/pankaj/.ssh/id_rsa")
if err != nil {
log.Fatalf("unable to read private key: %v", err)
}
// Create the Signer for this private key.
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
log.Fatalf("unable to parse private key: %v", err)
}
hostKeyCallback, err := knownhosts.New("/Users/pankaj/.ssh/known_hosts")
if err != nil {
log.Fatal(err)
}
sshConfig := &ssh.ClientConfig{
User: "pankaj",
Auth: []ssh.AuthMethod{
ssh.PublicKeys(signer),
},
HostKeyCallback: hostKeyCallback,
}
conn, err := ssh.Dial("tcp", "dev.letsreap.com:22", sshConfig)
if err != nil {
log.Fatalf("unable to connect: %v", err)
}
但是在ssh.Dial上,我得到了:
ssh: handshake failed: knownhosts: key mismatch
我已验证可以从命令行连接到远程服务器。如果使用ssh.InsecureIgnoreHostKey(),也可以成功连接。我想念什么?
答案 0 :(得分:0)
我终于明白了。实际上,known_hosts文件中有多个条目,一个条目的主机名,另一个条目的IP地址。这就是为什么我没有较早发现它的原因。感谢@JimB的提示!