【问题标题】:JSch: UnknownHostKey exception even when the hostkey fingerprint is present in the known_hosts fileJSch:UnknownHostKey 异常,即使在 known_hosts 文件中存在主机密钥指纹
【发布时间】:2016-04-01 05:32:54
【问题描述】:

关于这个异常已经有两个问题了:

我正在使用 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 并在提示输入密码和建立连接之前收到此输出

host '[localhost]:2200 ([127.0.0.1]:2200)' 的真实性不能 成立。 ECDSA 密钥指纹是 11:5d:55:29:8a:77:d8:08:b4:00:9b:a3:61:93:fe:e5。你确定你想要 继续连接(是/否)?是警告:永久添加 '[localhost]:2200' (ECDSA) 到已知主机列表。

所以现在git_home\.ssh 中的known_hosts 文件包含localhost:2200 的条目,我还将known_hosts 文件放入user_home\.ssh。我还将我的私钥放在我试图通过 ssh 进入的 VM 上并运行它以生成公钥并将其添加到 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");

【问题讨论】:

    标签: java ssh vagrant jsch


    【解决方案1】:

    问题是您已将 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?

    你也可以使用ssh-keyscan:

    ssh-keyscan -t rsa example.com
    

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2023-04-07
      • 2018-05-06
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      相关资源
      最近更新 更多