PuTTY 警告:服务器的主机密钥与 PuTTY 在注册表中缓存的密钥不匹配

PuTTY 警告:服务器的主机密钥与 PuTTY 在注册表中缓存的密钥不匹配

当使用PuTTY连接到新主机时,我经常会收到警告

服务器的主机密钥与 PuTTY 在注册表中缓存的密钥不匹配。

我按下后

是的

PuTTY 将服务器 RSA 密钥添加到 Windows 10 的注册表中,这样我就能够登录远程服务器,并且不会再次出现警告。

我知道 RSA 密钥是成对的,既有公钥也有私钥。我想知道的是服务器将哪个密钥保存到了我的本地计算机中,我猜是服务器的公钥。

此外,当 PuTTY 与服务器建立初始 SSH 连接时,服务器如何决定转发哪个密钥?假设服务器有公钥列表,对于任何尝试建立连接的客户端,是否有通用密钥?

这个通用密钥在服务器上存储在哪里?在/root/.ssh/ authorized_keys

答案1

一般来说,当你得到

警告——潜在的安全漏洞!

服务器的主机密钥与 PuTTY 在注册表中缓存的密钥不匹配。

这表明MITM 攻击

另请参阅 PuTTY 文档警告——潜在的安全漏洞!(您在问题中以某种方式省略了消息的主要部分是什么)。

您永远不会收到此消息新的服务器。当然,除非新服务器重用某个已丢弃服务器的 IP 地址/主机名。在这种情况下,可以忽略警告。


当然,这是民众PuTTY 缓存的密钥。私人的密钥是秘密的,除了服务器管理员之外,任何人都不能访问它。因此,SSH 无法客户可以得到它。


服务器确实可以拥有多个针对不同算法的密钥对(每个算法一个,例如 RSA、DSA、ECDSA、ED25519)。客户端和服务器将就使用的最佳算法达成一致(在服务器和客户端都支持的算法中,选择最佳算法)。


密钥对通常存储在/etc/ssh(在带有 OpenSSH 的 Linux 上)。


尽管您的问题的措辞暗示您可能会将服务器/主机密钥对与用于向服务器进行身份验证的密钥对混淆。

我的文章了解 SSH 密钥对

答案2

我知道 rsa 密钥是成对的,既有公钥也有私钥,我想了解的是服务器将哪个密钥保存到了我的本地机器中,我猜是服务器的公钥

是的,PuTTY 会保存服务器公钥的指纹。您可以在注册表中的以下键下看到所有存储的密钥:HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

另外,当 putty 与服务器建立初始 SSH 连接时,服务器如何决定转发哪个密钥?假设服务器有公钥列表,对于任何尝试建立连接的客户端,是否有通用密钥?这个通用密钥存储在服务器上的什么位置?

服务器对于每种密钥类型(RSA、DSA 等)只有一个主机密钥。它们的存储位置取决于配置,但例如,在 Ubuntu 系统上,它们通常默认存储在/etc/ssh

答案3

如果你确定这不是 MITM 攻击或其他安全漏洞,你可以使用它plink来更新密钥,例如

plink [email protected]

它将提示警告——潜在的安全漏洞!消息并提供更新缓存密钥的选项。无需亲自修改 Windows 注册表...

答案4

运行以下命令

SSH-T[电子邮件保护]

它会给你一个类似下面的警告信息,并且从 known_hosts 文件中删除有问题的密钥

警告:'github.com' 的 ECDSA 主机密钥与 IP 地址 '140.82.112.4' 的密钥不同

  • ~/.ssh/known_hosts:11 中的 IP 密钥有问题
  • 在 ~/.ssh/known_hosts:15 中匹配主机密钥
  • 您确定要继续连接吗(是/否)

笔记

  • 重复此操作,直到所有有问题的钥匙都被移除。
  • Pageant(PuTTY 身份验证代理)可能需要重新启动

也可以看看https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/

相关内容