我已经从使用 TLS 的 FTP 切换到 SFTP,现在当我尝试连接时会出现一个对话框,提示“www.example.com 的主机密钥未知”。然后它显示两个选项“拒绝”和“允许”。
这是什么意思?我应该选择允许还是拒绝?
答案1
SFTP 基于 SSH;与 ssh 一样,您连接的主机将为您提供一个唯一密钥,以便您识别它们。如果您接受该密钥,则将来您连接到同一主机时,系统会将提供的密钥与第一次提供的密钥(存储在 $HOME/.ssh/known-hosts 中)进行核对,如果两者匹配,则不会再次询问您;如果两者不匹配,则会警告您可能受到攻击(中间人攻击,MTIM)。
所以它基本上是一个安全功能。SSH 基于 TOFU(首次使用时信任)。这意味着您必须在与系统管理员核实所呈现的密钥确实是他们的密钥后接受该密钥,然后继续建立通信。
编辑:
如何检查我们是否获得了正确的密钥,而无需询问(可能不存在的)系统管理员?首次连接到 SSH/SFTP 服务器时,您会看到类似以下内容:
$ ssh me@remote
The authenticity of host '[remote]:22 ([192.168.1.72]:22)' can't be established.
ECDSA key fingerprint is b2:2d:52:1a:40:c2:f9:ca:9a:42:86:76:f4:0b:eb:84.
Are you sure you want to continue connecting (yes/no)?
记下指纹类型(ECDSA,见上文)和指纹本身(b2:2d:52:1a:40:c2:f9:ca:9a:42:86:76:f4:0b:eb:84
见上文)。现在转到服务器(物理服务器,或者,如果是 VPS,则转到控制台),无需任何操作sudo su
,转到 /etc/ssh。您将看到有许多.pub
文件;其中一个是 ssh_host_ecdsa_key.pub(我们呈现的指纹类型)。现在发出此命令:
$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
其输出必须与上面提供的指纹匹配。如果匹配,您现在可以在 ssh 会话中接受密钥指纹,然后继续通过 ssh 进入服务器。
无需从服务器导入任何内容:ssh 将为您处理此事。
答案2
这是删节版我的指导 在哪里可以获取 SSH 主机密钥指纹来授权服务器?
您应该从服务器管理员处获取 SSH 主机密钥指纹以及您的凭据。了解主机密钥指纹并能够验证它是确保 SSH 连接安全不可或缺的一部分。它可以防止中间人攻击。
在现实世界中,大多数管理员不提供主机密钥指纹。
为了实现最佳安全性,您需要使用最安全的方式连接到服务器。采取一切可能的预防措施,确保您的本地计算机和服务器线路的安全。例如,如果您需要获取主机密钥来验证从外部站点(例如从家里或客户端)到服务器的连接,但您可以物理访问服务器站点,请从服务器站点(例如您的工作场所)进行连接。
您还可以询问任何可以物理访问服务器的人(最好是管理员)。主机密钥只有一个,因此对所有用户都一样。另请注意,主机密钥指纹仅由主机密钥的公钥部分生成。因此它不是秘密的,可以通过未加密(但受信任)的通信渠道安全地发送。
一种特殊情况是获取服务器的主机密钥,您是自己的管理员,但没有直接的安全线路进行连接。这在虚拟服务器或云服务器中很常见。在这种情况下,服务器提供商应该有一个特定的解决方案。例如,与您的服务器位于同一私有网络中的专用服务器,具有公开的主机密钥。您可以连接到此专用服务器,然后从它安全地连接到您的服务器(例如使用 SSH 终端)。由于您是在私有网络内连接,因此您可以安全地信任任何主机密钥。连接到您的服务器后,获取其主机密钥。这样,您最终就可以通过公共网络直接而安全地进行连接。或者,服务器提供商可以通过某些管理界面提供主机密钥。
例如我的指南: