JCraft:SCP使用没有密码的私钥

时间:2014-06-30 10:35:39

标签: java key-pair

我试图在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。我知道我做错了什么。

进程:我在客户端上生成无passpharase的RSA密钥,并在目标上复制公钥。现在尝试使用JCraft Librabry将文件从客户端scp到目的地

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

1 个答案:

答案 0 :(得分:0)

您的客户端根本不知道服务器端的主机密钥。有两件事可以做:要么告诉JSch根本不检查主机密钥或提供有效密钥。

不检查HostKeys

在这种情况下,您必须提供选项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();
...

供应HostKeys

在这种情况下,您提供包含主机密钥的文件。该文件是标准的OpenSSH已知主机密钥文件,可以使用Linux或cygwin上的标准ssh命令创建和更新。

...
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岁以上的文档。