2015-04-01 61 views
0

我试图从Windows机器上复制一些文件到一台Linux机器上,该机器到目前为止工作正常。我可以使用StrictHostKeyChecking no复制文件,或者我需要从我复制到的Linux机器上获得known_host文件。我正在使用Java项目的代码,该项目应该能够将文件自动发送到(未知)Linux机器。我得到了机器的用户名,密码,IP和公钥。如果没有known_host文件和公钥,有没有办法进行身份验证?因为安全问题,我不想切换到StrictHostKeyCheckingno然后我得到“com.jcraft.jsch.JSchException:UnknownHostKey”JSch scp without known_host文件和StrictHostKeyChecking

FileInputStream fis = null; 
JSch jsch = new JSch(); 

//jsch.setKnownHosts(""); 
jsch.addIdentity("D:\\Uni\\Arbeit\\remote_id_rsa"); 
Session session=jsch.getSession(user, host, 22); 
session.setPassword(password); 
//session.setConfig("StrictHostKeyChecking", "no"); 
session.connect(); 
+1

您不想禁用主机密钥检查,但要连接到没有主机密钥的主机。主机密钥检查在这里担任什么角色?由于主机密钥检查,jsch应该在这里做什么? – Kenster 2015-04-01 15:13:19

+0

问题是如果有可能通过不使用jsch.setKnownHosts(“”)连接到机器;而不是将StrictHostKeyChecking设置为no。因为我认为在java程序中比在KnownHostFile中需要公钥/私钥更好。我对JSch和关键认证非常陌生,也许很难得到我真正想做的事情。因此,我再次获得用户名,密码和私钥/公钥对,是否可以使用这些凭证进行身份验证,以便我不需要复制KnownHost文件? – Brave 2015-04-05 12:10:58

回答

0

这是没有意义的。要么你知道主机公钥,你可以验证它要么使用known_host文件或编程方式使用:

public void KnownHosts.add(HostKey hostkey, UserInfo userinfo) 

(可以使用Session.getHostKeyRepository()访问KnownHosts实例)

有关详细信息,请参阅How to resolve Java UnknownHostKey, while using JSch SFTP library?


或者您不知道主机公钥,然后您无法创建安全连接(并且StrictHostKeyChecking=no是您唯一的选择)。


一篇关于verifying the host key理解,它是什么,以及它的重要性。这篇文章是关于WinSCP客户端的,但它通常适用于任何SSH客户端。

+0

感谢您的回答。我知道私钥/公钥对,所以我应该能够创建一个安全的连接。但我不想使用KnownHost文件。如果我对你有帮助,那么我需要以编程的方式来完成。但我不明白这应该如何工作。首先,我通过Session.getHostKeyRepository()获取HostKeyRepository,然后通过public void KnownHosts.add(HostKey hostkey,UserInfo userinfo)添加主机密钥。会话如何知道存储库中有新密钥? – Brave 2015-04-05 12:19:46

+0

['HostKey'实例包含“host”](http://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/HostKey.html)。如果这是你要求的。 – 2015-04-08 07:29:35

+0

再次感谢,高度赞赏您的支持。我使用rsa public keypair,对于我认为的JSch应该没问题,但是当我运行以下时,我得到一个无效的键类型异常\t \t'HostKeyRepository repo = jsch.getHostKeyRepository(); \t \t File file = new File(“D:\\ Uni \\ Arbeit \\ remote_id_rsa”); byte [] HK = Files.readAllBytes(file.toPath());会话会话= jsch.getSession(user,host,22); session.setPassword(password); HostKey hk = new HostKey(“te2342st”,HK); \t 回购。add(hk,null); session.connect();' – Brave 2015-04-08 15:38:44