当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《JSch:UnknownHostKey异常,即使在known_hosts文件中存在hostkey指纹时也是如此》经验,为你挑选了1个好方法。

有关此异常的问题有两个:

JSchException:UnknownHostKey和

com.jcraft.jsch.JSchException:UnknownHostKey

我正在使用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建议设置strictHostKeyCheckingno,对我有用,但这不是首选的解决方案.他首选的解决方案是从命令行进行SSH,以便将主机添加到known_hosts文件中.我已经安装并执行了Git ssh -i openSSH_pair1\open_ssh_private vagrant@localhost -p 2200 并收到此输出,然后被提示输入密码并建立连接

无法建立主机'[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)添加到已知主机列表中.

所以现在我的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");

Martin Prikr.. 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算法协商失败.


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

请参阅如何强制SSH提供RSA密钥而不是ECDSA?



1> Martin Prikr..:

问题是你已经添加了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算法协商失败.


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

请参阅如何强制SSH提供RSA密钥而不是ECDSA?

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有