Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSch scp,没有已知的\u主机文件,并带有StrictHostKeyChecking_Java_Scp_Jsch_Public Key - Fatal编程技术网

Java JSch scp,没有已知的\u主机文件,并带有StrictHostKeyChecking

Java JSch scp,没有已知的\u主机文件,并带有StrictHostKeyChecking,java,scp,jsch,public-key,Java,Scp,Jsch,Public Key,我正在尝试将一些文件从Windows机器复制到Linux机器,到目前为止,JSch可以正常工作。我可以使用StrictHostKeyChecking no复制文件,或者我需要从我复制到的Linux机器上获取已知的\u主机文件。我正在使用Java项目的代码,该项目应该能够自动将文件发送到未知的Linux机器。我得到了这个机器的用户名、密码、IP和公钥。有没有办法不用已知的_主机文件,通过公钥进行身份验证?由于安全问题,我不想将StrictHostKeyChecking切换为no,但是我会得到com

我正在尝试将一些文件从Windows机器复制到Linux机器,到目前为止,JSch可以正常工作。我可以使用StrictHostKeyChecking no复制文件,或者我需要从我复制到的Linux机器上获取已知的\u主机文件。我正在使用Java项目的代码,该项目应该能够自动将文件发送到未知的Linux机器。我得到了这个机器的用户名、密码、IP和公钥。有没有办法不用已知的_主机文件,通过公钥进行身份验证?由于安全问题,我不想将StrictHostKeyChecking切换为no,但是我会得到com.jcraft.jsch.jscheException:UnknownHostKey

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();

这没有道理。您知道主机公钥,并且可以使用已知的\u主机文件或通过以下方式以编程方式对其进行验证:

public void KnownHosts.add(HostKey hostkey, UserInfo userinfo)
您可以使用Session.getHostKeyRepository访问KnownHosts实例

有关详细信息,请参阅

或者您不知道主机公钥,因此无法创建安全连接,StrictHostKeyChecking=no是您唯一的选择


请参阅我的文章了解,它是关于什么的,以及它的重要性。这篇文章是关于WinSCP客户端的,但它通常对任何SSH客户端都有效。

您不想禁用主机密钥检查,但希望连接到没有主机密钥的主机。主机密钥检查在这里扮演什么角色?作为主机密钥检查的结果,jsch应该在这里做什么?问题是是否有可能通过不使用jsch.setKnownHosts连接到机器;不要将StrictHostKeyChecking改为no,因为我认为在java程序中要求公钥/私钥比要求KnownHostFile更好。我对JSch和密钥身份验证非常陌生,也许很难得到我真正想要做的事情。所以再一次,我得到了用户名、密码和私钥/公钥对,是否可以使用这些凭据进行身份验证,这样我就不需要复制KnownHost文件?谢谢你的回答。我知道私钥/公钥对,因此我应该能够创建安全连接。但是我不想使用KnownHost文件。如果我没弄错的话,我需要通过编程来完成。但我不明白这是怎么回事。首先,我通过Session.getHostKeyRepository获取HostKeyRepository,然后通过public void KnownHosts.addHostKey hostkey、UserInfo UserInfo添加hostkey。那么会话如何知道存储库中有一个新密钥呢?它将与一起使用。如果这是你的要求。再次感谢,非常感谢你的支持。我使用rsa公钥对,我认为这对于JSch应该是可以的,但是当我运行以下命令时,我得到一个无效的密钥类型异常HostKeyRepository repo=JSch.getHostKeyRepository;File File=新文件:\\Uni\\Arbeit\\remote\u id\u rsa;字节[]HK=Files.readAllBytesfile.toPath;Session=jsch.getSessionuser,主机,22;session.setPasswordpassword;HostKey hk=新HostKeyte2342st,hk;repo.addhk,空;session.connect;什么是远程\u id\u rsa?恐怕您会感到困惑或不明白不同的钥匙是用来做什么的。公钥对是胡说八道。密钥对包含公钥和私钥,这就是为什么它是一对。主机密钥存储库应仅包括公钥。而id_rsa是私钥的通用名称。此外,您不应该在本地拥有服务器的私钥,这是一个可怕的安全漏洞。实际上,我想说的是,文件中有您的帐户私钥,而不是服务器的密钥。阅读我的文章。我实际上尝试了用户公钥和用户私钥。事实上,我不知道主机还有另一对钥匙,所以我被卡在那里了。我读了你的文章,并通过谷歌收集了更多的信息。我已经有点不好意思再问你一个问题了。在您的文章中,我从哪里获得SSH主机密钥指纹来授权服务器?你说我需要指纹,应该是这样的6a:de:e0:af:56:f8:0c:04:11:5b:ef:4d:49:ad:09:23。如果我没弄错的话,那就是主机公钥?使用指纹我仍然得到无效的密钥类型异常。。。