我有一台 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 读取:对等方重置连接 与 host1 的连接已关闭。
有人知道发生了什么事以及我该怎么做才能解决这个问题?
答案1
请不要像某些人建议的那样删除整个known_hosts文件,这完全会使警告失去意义。这是一项安全功能,用于警告您可能已发生中间人攻击。
我建议你先确定一下它认为某些东西发生变化的原因,很可能是 SSH 升级由于可能的安全漏洞而改变了加密密钥。然后,你可以从 known_hosts 文件中清除该特定行:
sed -i 377d ~/.ssh/known_hosts
这d警告中冒号后面显示了第 377 行:
/home/emerson/.ssh/已知主机:377
或者,您可以通过执行以下操作删除相关项
ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)
请不要清除整个文件,并确保在清除特定密钥之前这实际上是您想要连接的机器。
答案2
我认为虽然这里的一些答案解决了 OP 问题中建议的行动方案,但并没有完全回答这个问题。
问题是“如何删除 SSH 中的严格 RSA 密钥检查以及这里的问题是什么?”
这里的问题是,正如其他人所建议的那样,主机的更改可能是由于重新安装服务器(最常见的情况)。 并且推荐的解决方案确实是使用内联 sed 从 .ssh/authorized_keys 文件中删除有问题的密钥。
但是我没有看到任何答案针对问题的具体部分“如何删除 SSH 中的严格 RSA 密钥检查“。
您可以删除 ssh 配置文件中的 StrictHostKey 检查,通常存储在 中~/.ssh/config
。
下面提供了一个主机块的示例:
Host 101
HostName yourip|hostname
User youruserid
IdentityFile /path/to/keyfile
Port 22
StrictHostKeyChecking no
最后一行是专门添加的,StrictHostKeyChecking no
它的作用就是这个。根据你的具体情况,这可能对你有用,比如在专用服务器上运行多个虚拟化容器,只在几个 IP 上运行,在同一个 IP 上停止并启动另一个实例。
答案3
当您只需要对单个服务器执行 StrictHostKeyChecking 时,还有另一种删除它的方法:
ssh <server> -o StrictHostKeyChecking=no
答案4
您收到此信息是因为某些内容发生了变化(例如新的 NIC、新的 IP、服务器软件更改等)。Security focus 有一篇关于SSH 主机密钥保护。
只需通过编辑文件从服务器中删除密钥(使用 SFTP 或类似方法),$HOME/.ssh/known_hosts
然后在下次连接时接受新的密钥。
您的连接可能会因 StrictHostKeyChecking 设置而断开。请参阅此主题对于类似的问题。