JSch:UnknownHostKey异常,即使在known_hosts文件中存在hostkey指纹时也是如此

时间:2015-12-26 21:25:06

标签: java ssh vagrant jsch

这个例外已经有两个问题了:

我正在使用Windows机器并尝试连接到使用运行Ubuntu的Vagrant创建的VM。这是我的代码:

public static void main(String[] args) {
    String host = "localhost";
    String username = "vagrant";
    int port = 2200;
    String privateKey = "C:\\keys\\openSSH_pair1\\open_ssh_private";
    JSch js = new JSch();
    try {
        js.addIdentity(privateKey, "pass");
        js.setKnownHosts("C:\\Users\\user\\.ssh\\known_hosts");
        Session session = js.getSession(username, host, port);
        session.connect();
        System.out.println("Connected");
    } catch (JSchException e) {
        e.printStackTrace();
    }
}

@Pascal建议将strictHostKeyChecking设置为no,这对我有用,但这不是首选解决方案。他首选的解决方案是从命令行进行SSH,以便将主机添加到known_hosts文件中。我已经安装并执行了Git ssh -i openSSH_pair1\open_ssh_private vagrant@localhost -p 2200 并在被提示输入密码并建立连接之前收到此输出

  

主持人&[39] [localhost]的真实性:2200([127.0.0.1]:2200)'可'吨   成立。 ECDSA密钥指纹是   11:5D:55:29:8A:77:D8:08:B4:00:9B:A3:61:93:FE:E5。你确定要吗?   继续连接(是/否)?是警告:永久添加   ' [本地主机]:2200' (ECDSA)到已知主机列表。

现在known_hosts中的git_home\.ssh文件包含localhost:2200的条目,我还将known_hosts文件放入user_home\.ssh。我还将我的私钥放在VM上我尝试ssh并运行它来生成公钥并将其添加到authorized_keys

ssh-keygen -y -f open_ssh_private > open_ssh_gen.pub
cat open_ssh_gen.pub >> ~/.ssh/authorized_keys

但是我仍然得到这个例外

com.jcraft.jsch.JSchException: UnknownHostKey: localhost. RSA key fingerprint is 50:db:75:ba:11:2f:43:c9:ab:14:40:6d:7f:a1:ee:e3
    at com.jcraft.jsch.Session.checkHost(Session.java:797)
    at com.jcraft.jsch.Session.connect(Session.java:342)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at connect.Main.main(Main.java:24)

另一个问题的答案建议添加以下哪些对我不起作用

js.setKnownHosts("C:\\Users\\user\\.ssh\\known_hosts");

1 个答案:

答案 0 :(得分:10)

问题是您已将ECDSA主机密钥添加到known_hosts,因为ssh更喜欢该密钥类型:

  

ECDSA密钥指纹是11:5d:55:29:8a:77:d8:08:b4:00:9b:a3:61:93:fe:e5。

但是JSch更喜欢RSA密钥,它在known_hosts

中找不到
  

RSA密钥指纹为50:db:75:ba:11:2f:43:c9:ab:14:40:6d:7f:a1:ee:e3

您可能需要JCE在JSch中启用ECDSA。

请参阅JSch Algorithm negotiation fail

或者ssh使用-o HostKeyAlgorithms=ssh-rsa的RSA密钥。

请参阅How can I force SSH to give an RSA key instead of ECDSA?