我有一台 Linux 服务器,每当我连接它时,它都会向我显示更改 SSH 主机密钥的消息:
$ ssh root@host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@警告:远程主机标识已更改!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ 可能有人在做一些讨厌的事情!有人现在可能正在窃听您(中间人攻击)!也有可能 RSA 主机密钥刚刚更改。远程主机发送的 RSA 密钥的指纹为 93:a2:1b:1c:5f:3e:68:47:bf:79:56:52:f0:ec:03:6b。请联系您的系统管理员。在 /home/emerson/.ssh/known_hosts 中添加正确的主机密钥以消除此消息。/home/emerson/.ssh/known_hosts:377 中有问题的键
host1 的 RSA 主机密钥已更改,您已请求严格检查。主机密钥验证失败。
它让我登录了几秒钟,然后关闭了连接。
host1:~/.ssh # 从远程主机读取 host1: Connection reset by peer 与 host1 的连接关闭。
有谁知道发生了什么以及我能做些什么来解决这个问题?
请不要按照某些人的建议删除整个 known_hosts 文件,这完全可以消除警告的意义。这是一项安全功能,可警告您可能发生了中间人的攻击。
我建议您确定为什么它认为某些事情发生了变化,很可能是由于可能的安全漏洞,SSH 升级更改了加密密钥。然后,您可以从 known_hosts 文件中清除该特定行:
这将删除第377行,如警告中冒号后所示:
或者,您可以通过执行以下操作删除相关密钥
在清除特定密钥之前,请不要清除整个文件并确保这实际上是您要连接的机器。
我认为虽然这里的一些答案解决了 OP 问题中推荐的行动方案,但它并没有完全回答这个问题。
问题说明“如何在 SSH 中删除严格的 RSA 密钥检查,这里有什么问题?”
正如其他一些人所建议的那样,这里的问题是主机的更改可能是由于重新安装服务器(最常见的情况)。推荐的解决方案确实是使用内联 sed 从 .ssh/authorized_keys 文件中删除有问题的密钥。
但是,我没有看到任何答案解决了“如何在 SSH 中删除严格的 RSA 密钥检查”问题的特定部分。
您可以删除 ssh 配置文件中的 StrictHostKey 检查,该文件通常存储在
~/.ssh/config
.下面提供了一个示例主机块:
特别添加的行是最后一行
StrictHostKeyChecking no
。根据您的具体情况,这可能对您有用,例如在专用服务器上运行多个虚拟化容器,仅在几个 ip 上,在同一 ip 上停止和启动另一个实例。删除 StrictHostKeyChecking 的另一种方法,当您只需要为单个服务器执行此操作时:
首先,这是你的机器吗?您是否故意更改了主机密钥?如果不是,我会非常担心某些东西改变了这些数据。
其次,打开ssh调试,
看看它告诉你什么,也试着在你试图连接的服务器上查看 /var/log/secure 和 /var/log/messages 以获取线索,sshd 会给出很好的错误消息。
第三,这台机器是否连接到互联网?你真的应该允许root登录吗?
你得到这个是因为有些东西发生了变化(比如新的 NIC、新的 IP、服务器软件的变化等)。安全焦点有一篇关于SSH 主机密钥保护的好文章。
只需通过编辑文件从服务器中删除密钥(使用 SFTP 或类似方法)
$HOME/.ssh/known_hosts
,并在下次连接时接受新密钥。由于 StrictHostKeyChecking 设置,您的连接可能会断开。有关类似问题,请参阅此线程。
作为“主机”[广义上的定义,它可以是从重新安装/多重引导到具有您之前连接到的 IP 地址的完全不同的计算机的所有内容,例如] 对 ssh 客户端来说似乎已经改变,它给了你错误。
没有必要关闭严格检查,批量删除已保存的密钥也不明智。
对于特定的主机名或 IP 地址,在 known_hosts 中列出两个不同的键是很可能的;根据您是否认为可能需要当前存储在 known_hosts 中的“旧”密钥,为您提供 2 种选择
要么在 OP 的 known_hosts 的 l377 处删除它所指的特定密钥,要么同时保留两者
保留两者的最简单方法,避免删除 known_hosts 中的键,是
“在 known_hosts 中添加正确的主机密钥”/每个主机名多个 ssh 主机密钥的更多答案?