0

我试图在 2 个 linux 服务器之间使用密钥对进行 scp。我试图关注http://sthen.blogspot.in/2008/03/sftp-i-java-with-jsch-using-private-key.html

我能够在 linux 服务器之间 scp 文件,但是当我执行代码时,我收到错误 com.jcraft.jsch.JSchException: UnknownHostKey。知道我做错了什么。

过程:我在客户端生成了无密码的 RSA 密钥,并在目的地复制了公钥。现在尝试使用 JCraft 库将文件从客户端发送到目的地

我正在使用 jar 最新的 jar X.51

4

1 回答 1

0

您的客户端根本不知道服务器端的主机密钥。有两件事可以做:要么告诉 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 年的文档。

于 2014-06-30T11:09:33.370 回答