Java JCraft:SCP使用不带密码的私钥

Java JCraft:SCP使用不带密码的私钥,java,key-pair,Java,Key Pair,我试图在2台linux服务器之间使用密钥对进行scp。我试着跟着 我能够在linux服务器之间创建scp文件,但当我执行代码时,我得到错误com.jcraft.jsch.JSchException:UnknownHostKey。知道我做错了什么吗 过程:我已经在客户端生成了无密码的RSA密钥,并在目的地复制了公钥。现在正在尝试使用JCraft Library将文件从客户端映射到目标 我使用的是jar最新版本jar X.51您的客户端根本没有服务器端的主机密钥。有两件事可以做:要么告诉JSch根本

我试图在2台linux服务器之间使用密钥对进行scp。我试着跟着

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

过程:我已经在客户端生成了无密码的RSA密钥,并在目的地复制了公钥。现在正在尝试使用JCraft Library将文件从客户端映射到目标


我使用的是jar最新版本jar X.51

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

不检查主机密钥 在这种情况下,您必须提供选项StrictHostKeyChecking设置为no的配置:

我个人的建议是使用第二种方法,因为已知的主机密钥是ssh的附加安全特性,如果没有必要,您不应该放弃


注:您不应该只使用6年以上的文档。

感谢blafasel的快速响应。因此,如果我试图从服务器A到B进行scp,那么A必须在其know_主机文件中包含B的详细信息,并且需要在JCraft.setKnownHostsfilename中配置服务器A的此文件;
...
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();
...
...
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();
...