ssh远程主机标识已更改。

1173

我重新安装了我的服务器,现在出现了以下这些信息:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

我尝试了在互联网上找到的各种解决方案。我的known_hosts文件(通常在~/.ssh/known_hosts中)位于/var/lib/sss/pubconf/known_hosts。我尝试编辑它,但它仍然保持在一个状态。我已经安装了ipa-client并且使用的是Fedora 19。我该如何解决这个警告?

到目前为止,所有回答都只适用于未安装Freeipa的情况。

有关freeipa的正确答案在下面的评论中由adrin提供here


4
这里出现了僵局。这个问题被标记为重复,因此没有人可以添加答案,而它所链接的那个问题被标记为不相关,因此也无法在那里添加答案。如果你删除 known_hosts 文件,它也会解决问题。 - zar
4
作为一个想要验证他们的密钥的人,我发现这个答案很有用。http://askubuntu.com/a/83499/620623 - Declan McKenna
27
看起来GitHub为了安全原因更新了其RSA SSH主机密钥。如果有人遇到相同的问题,请尝试运行ssh-keygen -R github.com命令。 - Himanshu Singhal
123
如果您在2023年三月看到了这个问题,很可能是因为GitHub刚刚更新了他们的RSA密钥。有关如何处理的详细信息,请参见此处:github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key - Yogesh Yadav
27
最新更新:https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/ - Vipertecpro
显示剩余16条评论
30个回答

1830
这里是最简单的解决方案:
ssh-keygen -R <host>

例如,
ssh-keygen -R 192.168.3.10

ssh-keygen man page中得知:

-R hostname 从known_hosts文件中删除属于hostname的所有密钥。此选项可用于删除哈希主机(参见上面的-H选项)。

附注:对于Windows系统,请在Git Bash中执行此命令。


10
好的,结果证明在Windows上我需要使用来自git bash(或任何MingW32终端)的终端。有点棘手。 - jaycode
55
请记住,如果您通过特定端口连接,则可能需要使用类似于 ssh-keygen -R [127.0.0.1]:3022 的语法进行删除。只需检查您的 .ssh/known_hosts 文件以获取明确说明即可。 - Adam Johns
11
当我尝试这样做时,会出现错误 "<hostname>未在~/.ssh/known_hosts中找到"。 - Nodeocrat
14
请使用错误消息中准确的值,并在单引号内进行Shell转义,使用<host>。例如:... host key for [example.com]:3422 has changed ... 应改为 ssh-keygen -R '[example.com]:3422' - Samuel Kirschner
2
可能将地址用引号括起来会更有帮助,例如:ssh-keygen -R "[127.0.0.1]:3022" - Dilworth
显示剩余17条评论

277

使用

ssh-keygen -R [hostname]

一个使用IP地址/主机名的示例:

ssh-keygen -R 168.9.9.2

这会从known_hosts中更新您主机的offending。您还可以使用-f标志提供known_hosts的路径。


2
删除相应的密钥 $ ssh-keygen -R {server.name.com} | $ ssh-keygen -R {ssh.server.ip.address} | $ ssh-keygen -R server.example.com - DaddyMoe
3
主机名称清除示例:ssh-keygen -R '[localhost]:2222'。(翻译说明:本文简述了如何使用 ssh-keygen 命令来清除指定主机名和端口号的公钥信息。) - Pysis
1
通常发生这种情况是因为您的服务器唯一指纹与您首次连接时存储在known_hosts文件中的内容不匹配。在Linux上使用以下命令: s / home / username / .ssh 用于查看所有SSH密钥。要查看之前添加的所有主机指纹,可以使用 cat /home/username/.ssh/known_hosts 命令。您必须删除导致此问题的其中一个。要删除其中一个,请使用 ssh-keygen -R [hostname] 命令。如果这无法解决问题,您可以备份 cp -R /home/username/.ssh/known_hosts /home/username/.ssh/known_hosts.backup ,然后删除 rm -rf /home/username/.ssh/known_hosts 中的相关内容。 - Md Shayon
什么是[主机名]?请更具体一些。例如,在macOS Sierra上进行GitHub拉取! - Erika Electra
@ErikaElectra 我也在想同样的问题,结果发现在我的情况下只是 "bitbucket.org",你的情况可能是 "github.com"。 - Brumor

148

在重新创建Digital Ocean Ubuntu镜像后,我遇到了同样的错误。我使用了以下命令,并将我的服务器IP替换为[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

非常感谢!我之前使用的是主机名,在使用 IP 地址后它才起作用 :) - J. Lopes
1
这对我有用,应该被接受为答案。我不知道为什么后来出现了两个副本,而且都有更多的赞。 - Wylliam Judd
你的错误不同,你的服务器没有运行SSSD。请参考原帖。 - Mercury00

147

这个大锤的作用是一次性移除所有已知的主机:

rm ~/.ssh/known_hosts

关于蒙特雷

sudo rm /var/root/.ssh/known_hosts

我们使用一个跳板机来管理短寿命周期服务器的小子网,并且经常在共享相同ssh密钥的服务器之间重用内部IP地址。


当被接受的答案无法解决问题时,在我的vagrant虚拟机上运行良好。 - 100pic
9
这是一种很有用的工具,但使用它可能会导致中间人攻击(这正是“known_hosts”旨在防止的事情)。只有在您确信所有主机都安全时才可以使用它。 - Freedom_Ben
1
这对我也起作用了,之后我通过运行ssh sshuser@<ip地址>再次创建了主机文件,谢谢。 - Kanchan Tyagi
1
在我的 Mac 上工作过。 - RwkY
2
我觉得删除所有已知主机的指纹并不是一个好主意,应该只删除需要的指纹,而不是全部删除。 - Chaki_Black

55

当您重新安装服务器时,其身份将发生变化,并且您将开始收到此消息。Ssh无法知道您是否已更改了其连接的服务器,还是在您的网络中添加了一个中间服务器来嗅探所有通信 - 因此它会引起您的注意。

只需通过删除相关条目从known_hosts中删除密钥:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

由于 Offending RSA ...known_hosts:4 的原因,4d 内容出现在账户中


1
谢谢,但我不知道为什么,但我将其删除后又出现了。我尝试停止sssd服务,这种影响消失了,但在启动sssd后,它又出现了。 - Filip Dobrovolný
备份您的/.ssh目录,然后将其删除。在/.ssh被清除后,您的服务是否会继续重新添加密钥? - mockinterface
1
我已将 .ssh 重命名为 .ssh_old,在新的尝试连接后,它只创建了一个空目录 .ssh。而且我仍然无法使 /var/lib/sss/pubconf/known_hosts 可编辑。 - Filip Dobrovolný
5
更加便携的方法是:sed -i -e 4d /var/lib/sss/pubconf/known_hosts - Pierz
2
如果您想重新构建服务器而不会引起像此错误消息这样的中断,您该如何备份服务器的“标识”? - Ninjaxor

49
问题在于您之前接受了一个远程计算机的SSH连接并且该远程计算机的数字指纹或SHA256哈希密钥自上次连接以来已更改。因此,当您再次尝试SSH或使用使用SSH的github拉取代码时,会出现错误。为什么?因为您正在使用与以前相同的远程计算机地址,但是远程计算机正在以不同的指纹响应。因此,有可能有人正在欺骗您之前连接过的计算机。这是一个安全问题。
如果您百分之百确定远程计算机没有受到损害、黑客攻击、伪造等,则只需删除您已知的主机文件中远程计算机的条目即可解决问题。这样做将不会在连接时再出现SHA256指纹ID不匹配的情况。
在Mac上,你可以按照以下步骤操作:
1)找到输出行,其中包含RSA host key for servername:port has changed and you have requested strict checking.,需要使用该日志输出中的servername和可能的端口。
2)备份SSH已知主机文件cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak 3)查找存储计算机旧指纹的行,并将其删除。您可以使用步骤#1中的servername和端口来搜索特定的远程计算机指纹。nano /Users/yourmacusername/.ssh/known_hosts 4)按CTRL-X退出并选择Y保存更改。
现在键入ssh -p port servername,您将收到第一次尝试SSH连接该计算机时的初始提示。然后,您将被要求将更新后的SHA256指纹保存到已知主机文件中。如果您使用的是端口22上的SSH,则不需要-p参数。
如果出现任何问题,您可以恢复原始的known_hosts文件:cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts

6
应将其标记为已接受答案。按照这些步骤解决了我的问题,而“ssh-keygen -R [IP_ADDRESS]”对我无效。谢谢! - Yusuf Kamil AK
是的,这是那种不公平的情况,最佳答案毫无疑问。第二和第三个答案只是重复了第一个答案所说的,而且它们都有一个不完整的解决方案。 - brasofilo
如果我不确定远程计算机是否被攻击了,该怎么办? - Aniket Kariya

25

正如许多人已经说过的那样,使用ssh-keygen,即:

ssh-keygen -R pong

另外,您可能需要考虑暂时关闭主机密钥检查:

ssh -oStrictHostKeyChecking=no root@pong

4
жҲ‘еңЁдҪҝз”Ё.ssh/configж–Ү件зҡ„д»ҘдёӢй…ҚзҪ®пјҡ Host ???? CheckHostIP no StrictHostKeyChecking noпјҲдёүиЎҢпјҢд»Һ第дәҢиЎҢејҖе§Ӣз”ЁеҲ¶иЎЁз¬Ұзј©иҝӣпјү - XXL

24

可以使用!

错误:/var/lib/sss/pubconf/known_hosts中的RSA密钥错误:4

这表示您在第4行有一个错误的RSA密钥。

解决方案1:

1. vi /var/lib/sss/pubconf/known_hosts

2. 删除第4行

3. 保存并退出,然后重试

解决方案2:

ssh-keygen -R“你的服务器主机名或IP”

或者

解决方案3:

sed -i '4d' /root/.ssh/known_hosts

这将在原地(-i)删除/root/.ssh/known_hosts的第4行。


1
这适用于root的.ssh known_hosts文件,而不适用于/var/lib/sss/pubconf/known_hosts,这是SSSD管理的文件,并由远程服务器填充。 - Mercury00
1
在我的情况下,由于某种原因,问题出现在known_hosts2上。遵循这些步骤帮助我找到了问题所在,感谢@Sahil Gulati! - Lucas
1
我尝试了解决方案3,但是出现了错误(sed:-I或-i不能与stdin一起使用),所以我切换到解决方案1来解决。总体而言,这仍然是最佳答案+1! - cellepo

13

更新了您的ssh密钥后,收到上述消息是正常的。

只需编辑~/.ssh/known_hosts文件,并删除第4行,就如该消息所指示的那样。

Offending RSA key in /Users/isaacalves/.ssh/known_hosts:4

或者使用 ssh-keygen 命令删除无效的密钥

ssh-keygen -R "you server hostname or ip"

这是最简单的解决方案。 - Hasan Sawan
对于在 Mac 上工作的人,请注意对于较小的窗口大小,行不会按字面意义排列。每当出现新的主机名时,行就会开始。 - Timilehin A.

11

我使用了mockinterface的解决方案,尽管sed -i并没有完全起作用。我通过在vim中手动删除这一行解决了它:

我使用了mockinterface的解决方案,虽然sed -i没有完全生效。但我通过在vim中手动删除该行来解决它:

sudo vim /var/lib/sss/pubconf/known_hosts

您可以使用任何其他文本编辑器,但可能需要显示您的管理员权限


1
是的,在known_hosts文件中删除相同IP的记录将解决该问题。 - wherby
当尝试再次进行SSH时,SSSD会立即重新创建该条目。请注意,sss pubconf known_hosts是一个受管理的文件,而不是由本地服务器填充的某个本地存储库。 - Mercury00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接