您看到的消息是一个单独的问题。它要求您确认要连接的主机确实是您期望的主机。在服务器上,您可以通过运行获取指纹ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
。然后,当您第一次远程连接时,可以确保指纹匹配。
主机密钥(在这里起作用)解决了中间攻击中的人为问题-也许DNS已被破坏,并且您正在连接到竞争对手的计算机,而不是您自己的计算机。该计算机将收集您的凭据,并将您的连接透明地转发到真实服务器,从而在您不知情的情况下窃取您的信息。确保主机密钥匹配可以防止这种情况的发生,除非攻击者实际上已经窃取了服务器的公共密钥。
但是,问题仍然存在-您如何知道哪个密钥正确?第一次连接后,公钥存储在~/.ssh/known_hosts
文件中,因此以后的连接很好。但第一次,您要么需要某种带外方式来获取指纹,要么就遵循“ TOFU”模型:首次使用信任。
但这与密码和密钥无关,只是密钥和密码都可能通过这种攻击被盗-从某种意义上讲,这就是您所要求的漏洞。
(至少)有三个原因使密码比密钥差:
- 它们可能被强行使用。典型的用户选择的8个字符的密码具有大约30位的猜测熵。ssh公钥/私钥对为1024位或更大。暴力破解ssh密钥实际上是不可能的,但是自动密码猜测一直在发生。
- 他们可能是愚蠢的。用户经常选择可怕的密码,即使有适当的限制,他们也倾向于在多个地方使用更难的密码。这显然使攻击更加容易。
- 密码可以被远程窃取。当您使用SSH时,密码是在网络上加密的,但是在受感染的系统上用记录所有密码的ssh服务器替换ssh服务器是很常见的。使用密钥,私钥将保留在本地系统上,并且根本不会发送,因此,如果不真正损害客户端计算机,就无法将其窃取。
另外,ssh密钥与类似的东西一起使用时提供了便利ssh-agent
-您无需麻烦地进行连接即可轻松进行连接,而无需每次都进行身份验证,同时仍保持合理的安全性。
要求两者都没有明显的优势,因为具有足够的访问权以窃取私钥的人也可以很容易地窃取用户的密码。如果您需要的安全性不止此,请考虑使用两因素身份验证系统,例如RSA SecurID或WiKID。