当使用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/