JSch scp 没有 known_host 文件和 StrictHostKeyChecking

JSch scp without known_host file and with StrictHostKeyChecking

我正在尝试将一些文件从 Windows 机器复制到 Linux 机器,到目前为止,它在 JSch 上运行良好。我可以使用 StrictHostKeyChecking no 复制文件,或者我需要从我复制到的 Linux 机器上获得 known_host 文件。我正在使用 Java 项目的代码,该项目应该能够自动将文件发送到(未知)Linux 机器。我得到了机器的用户名、密码、IP 和公钥。有没有什么方法可以在没有 known_host 文件的情况下通过公钥进行身份验证?由于安全问题,我不想将 StrictHostKeyChecking 切换到 no 但后来我得到 "com.jcraft.jsch.JSchException: 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();

这没有意义。您知道主机 public 密钥,您可以使用 known_host 文件或以编程方式使用:

来验证它
public void KnownHosts.add(HostKey hostkey, UserInfo userinfo)

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

有关详细信息,请参阅


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


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