主机密钥不匹配

时间:2019-04-03 05:26:04

标签: go ssh ssh-keys

我正在尝试使用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(),也可以成功连接。我想念什么?

1 个答案:

答案 0 :(得分:0)

我终于明白了。实际上,known_hosts文件中有多个条目,一个条目的主机名,另一个条目的IP地址。这就是为什么我没有较早发现它的原因。感谢@JimB的提示!