java - 即使服务器的主机 key 存在于known_hosts 文件中,JSch 连接也会失败并显示 UnknownHostKey

标签 java ssh ssh-keys jsch

我正在使用 JSch 在多个 VPS 上部署各种文件。我能够通过 StrictHostKeyChecking 获得一个工作原型(prototype)关掉。我现在想重新启用主机 key 检查,这样我就不会受到 MITM 攻击。目前,客户端是一台连接到运行 Debian 的 VPS 的 Windows 计算机。这是我到目前为止所做的:

  1. 使用 "ssh-keyscan -t rsa <serverIp> >> ~/.ssh/known_hosts" 在我的本地计算机(Windows 客户端)上添加了远程 IP 地址
  2. 已将路径传递给我的known_hosts文件至JSch.setKnownHosts在我的应用程序中。

尝试建立连接时,结果是

com.jcraft.jsch.JSchException: UnknownHostKey: . RSA key fingerprint is

这显然是由于我对主机 key 的工作原理或加密技术缺乏了解。从我的基本理解来看,known_hosts文件包含一个 key 。该 key 用于确保我们连接的远程 IP 是他们所说的身份,从而防止任何人试图将自己“欺骗”为服务器。

我的known_hosts文件看起来像

184.154.70.174 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNv4m+tOZUipp8UDGrd+kbtsM5R+tu3ZYZi3p7OTRWUX/Wqy74pONlLqI+/WGu77EHnOfdssJfclgo37vKLRFKneXZNAMXE7FUu5yUNOHlpPwzmvYUT/sp1k9CeNrtJAbkm05pOBIDqDQQGfQ+IAw9zqqo/sqJ6c8NKiVFAt4Ud0msvedb559dhYgcjwb52ABbsJ0mZ8FnU7LKG1592/ZTtYxam+M3qMhtJacrh5gpfZjjx2lGhqpOgvM+xwWeK6DQVn0QyIJd474G3gcm4M43ErRfzXOum3p/0wOw+hL1ora9eWSz2Wf9WuDXf86xkbZPD7Gy6ER5LBhquy331p7X

我的代码是( SSH 是 JSch 的一个实例):

try {
    SSH.setKnownHosts(new FileInputStream("C:/Users/nvulc/.ssh/known_hosts"));
    SSH.addIdentity(keyPath, keyPass);
    Session session = SSH.getSession("root", "184.154.70.174", 22);
    session.connect();
} catch (Exception e) {
    e.printStackTrace();
}

结果是:

    com.jcraft.jsch.JSchException: UnknownHostKey: 184.154.70.174. RSA key fingerprint is b4:79:5a:58:d3:15:ad:a9:c7:af:cc:d7:09:f5:40:62
    at com.jcraft.jsch.Session.checkHost(Session.java:805)
    at com.jcraft.jsch.Session.connect(Session.java:345)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at Main.main(Main.java:40)

最佳答案

你的代码对我有用 – https://www.browxy.com/#ALIEN_137442 – 它以“JSchException:身份验证失败”结尾 – 这意味着它通过了主机 key 验证。

确保 known_hosts 文件采用纯 ASCII 编码(或不带 BOM 的 UTF-8,对于此类内容应与 ASCII 相同)。但带有 BOM 的 UTF-8 不行,更不用说 UTF-16 了,甚至更糟。

也尝试 Unix 行结尾。尽管行结尾不应该成为问题。

关于java - 即使服务器的主机 key 存在于known_hosts 文件中,JSch 连接也会失败并显示 UnknownHostKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67762389/

相关文章:

java - 无法根据 Android Studio 中的加速度计数据更新应用程序

java - 如何使用 aws-java-sdk 获取亚马逊网络服务中某个区域的所有可用图像的列表?

java - 致命异常 : java. lang.SecurityException RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED 之一 (com.google.android.play:core

git - 无法通过 SSH 进入我的 Bitbucket 存储库 - conq : repository access denied

perl - 如何将 Net::SSH::Perl 与公钥一起使用?

Java接口(interface)继承与扩展

linux - SSH/SCP 驱动器的内核模块

c++ - 无法使用 libssh2 进行编译

ubuntu - 新远程节点上的 Rundeck 身份验证失败

python - 如何设置 sshuttle?