如何在 SSH 中删除严格的 RSA 密钥检查,这里有什么问题?

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)

在清除特定密钥之前,请不要清除整个文件并确保这实际上是您要连接的机器。

  • Adam 的语法几乎是正确的,但是“377”和“d”之间需要一个空格。此外,在 OS X 中,已知主机位于 ~/.ssh/known_hosts ;请注意缺少“。” 在文件名中。 (3认同)

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 上停止和启动另一个实例。

  • +1 因为这篇文章实际上解决了错误消息的严格检查部分。 (3认同)

小智 14

删除 StrictHostKeyChecking 的另一种方法,当您只需要为单个服务器执行此操作时:

ssh <server> -o StrictHostKeyChecking=no
Run Code Online (Sandbox Code Playgroud)


Dav*_*ney 5

首先,这是你的机器吗?您是否有意更改了主机密钥?如果不是,我会非常担心某些事情已经改变了该数据。

其次,开启ssh调试,

ssh -vvv user@host
Run Code Online (Sandbox Code Playgroud)

看看它告诉你什么,也尝试查看你试图连接的服务器上的 /var/log/secure 和 /var/log/messages 以获取线索,sshd 给出了很好的错误消息。

第三,这台机器是否连接到互联网?你真的应该允许 root 登录吗?

  • +1 表示 root 登录评论 (2认同)