使用 JSch SFTP 库解决 Java UnknownHostKey 问题
使用 Java SFTP 库 (JSch) 时,您可能会遇到“UnknownHostKey”错误由于严格的主机密钥检查。引发此错误的原因是 JSch 无法验证远程服务器提供的主机密钥的真实性。
根本原因:
当您尝试连接到远程 SFTP 时发生错误第一次使用服务器。 JSch 执行主机密钥检查,以确保您连接到正确的服务器而不是恶意冒名顶替者。
解决方案:
有两种常见方法可以解决此问题:
1。跳过主机密钥检查:
此方法不推荐,因为它会损害您的连接安全。但是,如果您确定主机密钥是可信的,则可以在连接到服务器之前将“StrictHostKeyChecking”属性设置为“no”来禁用主机密钥检查:
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config);
2.添加预期的主机密钥:
为了增强安全性,建议将预期的主机密钥添加到 JSch 的主机密钥存储库。这可以使用以下方法之一来实现:
生成已知主机文件:
从 *nix 服务器执行以下命令:
ssh-keyscan example.com > known_hosts
使用“JSch.setKnownHosts(path)”指向文件:
JSch.setKnownHosts("path/to/known_hosts");
手动添加主机密钥:
将 HostKey 添加到主机密钥存储库:
JSch jsch = new JSch(); HostKey hostKey = jsch.getHostKeyRepository().add(hostname, publicKey, algName);
额外注意:
确保您提供的主机密钥与远程服务器提供的实际密钥匹配。如果密钥不匹配,连接仍然会因安全异常而失败。
以上是如何解决使用JSch的SFTP库时出现'UnknownHostKey”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!