set*_*shi 57 security ssh man-in-the-middle rsa hostkey
我有一个 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 的连接关闭。
有谁知道发生了什么以及我可以做些什么来解决这个问题?
Ada*_*ins 84
请不要按照某些人的建议删除整个 known_hosts 文件,这完全使警告无效。这是一项安全功能,可警告您可能发生了中间人攻击。
我建议您确定为什么它认为某些事情发生了变化,很可能由于可能的安全漏洞,SSH 升级更改了加密密钥。然后,您可以从 known_hosts 文件中清除该特定行:
sed -i 377d ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
此d eletes线377在警告冒号后如图所示:
/home/emerson/.ssh/known_hosts:377
或者,您可以通过执行以下操作来删除相关密钥
ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)
Run Code Online (Sandbox Code Playgroud)
在清除特定密钥之前,请不要清除整个文件并确保这实际上是您要连接的机器。
Joe*_*hew 31
我认为虽然这里的一些答案解决了 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
Run Code Online (Sandbox Code Playgroud)
特别添加的行是最后一行StrictHostKeyChecking no,它就是这样做的。根据您的特定场景,这可能对您有用,例如在专用服务器上运行多个虚拟化容器,仅在几个 ip 上,在同一 ip 上停止和启动另一个实例。
小智 14
删除 StrictHostKeyChecking 的另一种方法,当您只需要为单个服务器执行此操作时:
ssh <server> -o StrictHostKeyChecking=no
Run Code Online (Sandbox Code Playgroud)
首先,这是你的机器吗?您是否有意更改了主机密钥?如果不是,我会非常担心某些事情已经改变了该数据。
其次,开启ssh调试,
ssh -vvv user@host
Run Code Online (Sandbox Code Playgroud)
看看它告诉你什么,也尝试查看你试图连接的服务器上的 /var/log/secure 和 /var/log/messages 以获取线索,sshd 给出了很好的错误消息。
第三,这台机器是否连接到互联网?你真的应该允许 root 登录吗?