com.jcraft.jsch.JSchException出现UnknownHostKey错误怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (159)

我正在尝试使用Jsch在Java中建立SSH连接。我的代码产生错误:

com.jcraft.jsch.JSchException: UnknownHostKey: mywebsite.com. 
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.com";
            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. 尝试让ssh从命令行接受公钥(主机将被添加到~/.ssh/known_hostsJsch中,并且所有东西都能正常工作)。
  2. 配置JSch不使用“StrictHostKeyChecking”,使用以下代码: java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config);

用户回答回答于

避免主机密钥检查有安全风险。

JSch使用HostKeyRepository接口和它的默认实现KnownHosts类来管理它。可以通过HostKeyRepository提供允许特定键的备用实现。或者可以将您想要允许的密钥保存known_hosts格式的文件中并进行调用

jsch.setKnownHosts(knownHostsFileName);

或者使用公钥字符串,如下所示:

String knownHostPublicKey = "mysite.com ecdsa-sha2-nistp256 AAAAE............/3vplY";
jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));

请参阅Javadoc了解更多详情。

这将是一个更安全的解决方案。

扫码关注云+社区