您的客户端根本不知道服务器端的主机密钥。有两件事可以做:要么告诉 JSch 根本不要检查主机密钥,要么提供一个有效的密钥。
不检查主机密钥
在这种情况下,您必须提供选项StrictHostKeyChecking
设置为的配置no
:
...
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
Hashtable<String, String> config = new Hashtable<String, String>();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
...
提供主机密钥
在这种情况下,您提供一个带有主机密钥的文件。该文件是标准 OpenSSH 已知主机密钥文件,可以ssh
在 Linux 或 cygwin 上使用标准命令创建和更新。
...
JSch jsch = new JSch();
jsch.setKnownHosts(knownHostsFilename);
Session session = jsch.getSession(user, host, port);
Hashtable<String, String> config = new Hashtable<String, String>();
config.put("StrictHostKeyChecking", "yes");
session.setConfig(config);
session.connect();
...
我个人的建议是使用第二种方式,因为已知的主机密钥是 ssh 的附加安全功能,如果没有必要,您不应放弃。
PS:你不应该只使用超过 6 年的文档。