JSch SFTP 安全性与 session.setConfig("StrictHostKeyChecking", "no");
Posted
技术标签:
【中文标题】JSch SFTP 安全性与 session.setConfig("StrictHostKeyChecking", "no");【英文标题】:JSch SFTP security with session.setConfig("StrictHostKeyChecking", "no"); 【发布时间】:2015-07-22 14:56:21 【问题描述】:我使用 JSch 和 FTP 文件的私钥
-
jsch.addIdentity(privatekeyfile);
会话会话 = jsch.getSession("user", "domain.com" ,22);
session.setConfig("StrictHostKeyChecking", "no");
第 3 行有问题。没有这一行,JSch 就无法工作。
我的问题是: 第 3 行会使 SFTP 传输不安全吗?
【问题讨论】:
【参考方案1】:禁用StrictHostKeyChecking
选项将使连接的安全性低于启用该选项,因为它可以让您连接到远程服务器而无需验证其 SSH 主机密钥。如果启用该选项,您将只能连接到您的 SSH 客户端已知密钥的服务器。
您必须确定这对您的特定用例意味着什么 - 您是在专用本地网络上连接的服务器还是通过互联网连接?这是测试环境还是生产环境?
如有疑问,最好选择更安全的方式。我建议启用StricktHostKeyChecking
并使用setKnownHosts
method 提供一个包含远程主机密钥的文件。
【讨论】:
感谢 krautmeyer 和 Martin。 setKnownHosts 需要一个文件。文件在哪里?我通过 FTP 连接到 AWS EC2 Linux 实例。创建实例时,我得到了我的私有密钥文件。但是在方法 setKnownHosts 中设置什么?谢谢! 该文件需要在运行您的程序的客户端上可用。如果您有权访问 Linux 机器,您可以自己生成文件:ssh-keyscan -t rsa hostname > known_hosts
在这种情况下,主机名将是您要连接的目标服务器。然后只需将文件传递给setKnownHosts
方法。
谢谢。我登录 Linux 并运行:ssh-keyscan -t rsa abc.com > /home/known_hosts。一个文件 known_hosts 在 home 中创建但为空。 abc.com 是我用来 FTP 到此服务器的域。谢谢。
尝试运行ssh-keyscan -t rsa abc.com
并发布输出。
$ ssh-keyscan -t rsa abc.com
什么也不输出。它完成并返回命令行。 $ ssh-keyscan -t rsa abc.com
$
【参考方案2】:
是的,它会降低连接(和传输)的安全性。特别是,它使连接打开到Man-in-the-middle attacks。
您永远不应将StrictHostKeyChecking
设置为no
,除非您不关心安全性(例如在专用网络中连接时)。
“没有这行,JSch 就不行”是不正确的。您只需让您的代码接受预期的服务器主机密钥。通过setKnownHosts
或setHostKeyRepository
方法。
例如,见How to resolve Java UnknownHostKey, while using JSch SFTP library?
您可以阅读我在verifying the host key 上的文章以了解其重要性。这是关于 WinSCP SSH/SFTP 客户端的,但对于任何 SSH 客户端/库通常都是如此。
【讨论】:
以上是关于JSch SFTP 安全性与 session.setConfig("StrictHostKeyChecking", "no");的主要内容,如果未能解决你的问题,请参考以下文章