com.jcraft.jsch.JSchException: UnknownHostKey

2022-08-31 06:13:31

我正在尝试使用Jsch在Java中建立SSH连接。我的代码生成以下异常:

com.jcraft.jsch.JSchException: UnknownHostKey: mywebsite.example.
RSA key fingerprint is 22:fb:ee:fe:18:cd:aa:9a:9c:78:89:9f:b4:78:75:b4

我无法在 Jsch 文档中找到如何验证主机密钥。我在下面包含了我的代码。

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class ssh {
    public static void main(String[] arg) {

        try {
            JSch jsch = new JSch();

            //create SSH connection
            String host = "mywebsite.example";
            String user = "username";
            String password = "123456";

            Session session = jsch.getSession(user, host, 22);
            session.setPassword(password);
            session.connect();

        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

答案 1

我会:

  1. 尝试从命令行并接受公钥(主机将被添加到,然后一切都应该从Jsch正常工作) - OR -ssh~/.ssh/known_hosts
  2. 使用以下代码将 JSch 配置为不使用“StrictHostKeyChecking”(这会引入不安全感,应仅用于测试目的):

    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    

选项#1(将主机添加到文件)有我的偏好。~/.ssh/known_hosts


答案 2

虽然这个问题已经得到了一般的回答,但我发现自己有一种情况,即使现有的known_hosts条目也没有帮助。当SSH服务器发送ECDSA指纹时,就会发生这种情况,因此,您将有一个如下条目:

|1|+HASH=|HASH= ecdsa-sha2-nistp256 FINGERPRINT=

问题是JSch更喜欢SHA_RSA并且在连接时它会尝试比较SHA-RSA指纹,这将导致有关“未知主机”的错误。

要解决此问题,只需运行:

$ ssh-keyscan -H -t rsa example.org >> known_hosts

或者向Jcraft抱怨更喜欢SHA_RSA而不是使用本地HostKeyAlgorithms设置,尽管他们似乎不太急于修复他们的错误


推荐