ssh远程主机标识已更改


618

我已经重新安装服务器,并且收到以下消息:

[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.

我尝试了在Internet上找到的各种解决方案。我的known_hosts文件(通常在中~/.ssh/known_hosts)位于中/var/lib/sss/pubconf/known_hosts。我尝试对其进行编辑,但它仍处于一种状态。我已经安装了ipa-client并安装了Fedora19。如何解决此警告?

到目前为止,只有在未安装Freeipa的情况下,所有回答的答案才有效。

在从adrin下面的评论freeipa正确的答案是在这里


1
只是发现很难的方法,如果您有ip地址冲突nslookup您的ip来调试此问题,也可能会发生此问题
sharrajesh 2015年

1
这里有一个僵局。此人被标记为重复,因此没有人可以添加答案,而链接的人被标记为主题,因此也无法在其中添加答案。如果删除known_hosts,它也会解决此问题。
ZAR

1
我有同样的问题。为了我和他人,这是我的问题和答案:superuser.com/questions/1071204/…–
adrin

3
当有人希望首先验证其密钥时,我发现此答案很有用。askubuntu.com/a/83499/620623
Declan McKenna

正如sharrajesh提到的那样:检查您的DNS条目(对我来说,在FreeIPA中),看看您没有多个IP地址无法从网络访问的A条目。
th3penguinwhisperer

Answers:


1070

这是最简单的解决方案

ssh-keygen -R <host>

例如,

ssh-keygen -R 192.168.3.10

ssh-keygen手册页

  • -R hostname从known_hosts文件中删除所有属于主机名的密钥。此选项对于删除散列主机很有用(请参见上面的-H选项)。

我在Windows上并且使用此解决方案,删除密钥也无法正常工作,我还能尝试什么?
jaycode 2015年

5
好的,在Windows上,我需要为此使用git bash的终端(或任何MingW32终端)。整rick
jaycode 2015年

25
请记住,如果通过特定端口连接,则可能必须使用语法删除ssh-keygen -R [127.0.0.1]:3022。只需检查您的.ssh / known_hosts文件,以明确显示该文件。
亚当·约翰斯

4
当我尝试此操作时,出现错误“在〜/ .ssh / known_hosts中找不到<主机名>”
Nodeocrat

3
为什么会出现此警告?
维拉斯·乔希

199

采用

ssh-keygen -R [hostname]

IP地址/主机名的示例为:

ssh-keygen -R 168.9.9.2

这将根据known_hosts更新您的主机的违规行为。您还可以通过-f标志提供known_hosts的路径。


1
删除相应的密钥$ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe,2015年

5
没有解释的答案如何获得如此多的好评..没有安全隐患,没有解释.... -1
Daniel W.

4
似乎也像下面其他答案的副本一样。请国防部清理这个烂摊子……
丹尼尔·

115

重新创建Digital Ocean Ubuntu映像后,我也发生了同样的错误。我在服务器IP上使用以下命令代替[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

非常感谢!我使用的是主机名,它只能与IP_ADDRESS一起使用:)
J. Lopes

1
这为我做到了,应该是公认的答案。我不知道为什么以后会有这个答案的两个副本,并且都有更多的赞誉。
威廉·贾德

您的错误不一样;您的服务器未运行SSSD。参见操作手册。
Mercury00

39

重新安装服务器时,其身份会更改,您将开始收到此消息。Ssh无法知道您是否已更改与其连接的服务器,或者是否已将中间服务器添加到网络中以监听所有通信,因此它引起您注意。

只需删除相关条目,即可从known_hosts中删除密钥:

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

4d是对账号Offending RSA ...known_hosts:4


1
谢谢,但是我不知道为什么,但是我将其删除,并且又放入了它。我尝试停止sssd服务,但这种效果消失了,但是启动sssd之后,它又出现了。
FilipDobrovolný13年

备份〜/ .ssh目录,然后将其删除。〜/ .ssh被炸掉后,您的服务是否仍在继续添加密钥?
模拟接口

我将.ssh重命名为.ssh_old,在尝试进行新连接后,只需创建空目录.ssh。而且我仍然无法将/ var / lib / sss / pubconf / known_hosts设为“可编辑”。
FilipDobrovolný13年

4
更便携式的方法: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz 2015年

2
identification如果您希望重建服务器而又不会引起此错误消息这样的中断,该如何备份服务器?
Ninjaxor

38

大锤将一举清除所有已知的宿主:

rm ~/.ssh/known_hosts

我遇到了这个问题,因为我们从跳转框中使用了存在时间短的服务器的小型子网,并且经常使用共享相同ssh密钥的服务器的内部IP地址重用。


当接受的答案不起作用时,在无聊的VM上为我工作。
100pic,

1
有用的工具,但这可能会使您容易遭受MitM攻击(这known_hosts是要防止的确切操作)。仅当您确信其中的所有主机都安全时,才执行此操作。
Freedom_Ben

26

问题是您以前接受了到远程计算机的SSH连接,并且自上次连接以来,远程计算机的数字指纹或SHA256哈希密钥已更改。因此,当您再次尝试SSH或使用github提取代码(也使用SSH)时,会出现错误。为什么?因为您使用的远程计算机地址与以前相同,但是远程计算机以不同的指纹进行响应。因此,可能有人在欺骗您先前连接的计算机。这是一个安全问题。

如果您100%确定远程计算机没有受到威胁,被黑客入侵,被欺骗等,那么您所需要做的就是删除远程计算机的known_hosts文件中的条目。这样可以解决问题,因为连接时不再与SHA256指纹ID不匹配。

在Mac上,这是我的工作:

1)找到显示以下内容的输出行:RSA host key for servername:port has changed and you have requested strict checking.您将需要该日志输出中的服务器名和可能的端口。

2)备份SSH已知主机文件 cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3)找到存储计算机旧指纹的行并将其删除。您可以使用步骤1中的服务器名称和端口来搜索特定的有问题的远程计算机指纹。nano /Users/yourmacusername/.ssh/known_hosts

4)CTRL-X退出并选择Y保存更改

现在输入ssh -p port servername,您将收到您初次尝试SSH到该计算机时所做的原始提示。然后,您可以选择将远程计算机的更新的SHA256指纹保存到您的known_hosts文件中。如果您通过端口22使用SSH,则-p参数不是必需的。

您可以还原原始的known_hosts文件的任何问题: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


3
该标记为已接受答案。遵循这些步骤可以解决我的问题,ssh-keygen -R [IP_ADDRESS]但对我却不起作用。谢谢!
优素福·卡米尔

是的,其中一种情况不公平,可以肯定是最好的答案。第二个和第三个答案只是重复第一个的意思,所有答案都不完整。
brasofilo

16

正如许多人所说,use ssh-keygen,即

ssh-keygen -R pong

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

ssh -oStrictHostKeyChecking=no root@pong

我正在使用的.ssh / configHost ???? CheckHostIP no StrictHostKeyChecking no(3行,从第二行开始列出)
XXL

15

为我工作!

错误:在/ var / lib / sss / pubconf / known_hosts中冒犯RSA密钥:4

这表明您在第no行有一个有问题的RSA密钥。4

解决方案1

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

2 remove line no: 4

3 Save and Exit, and Retry

解决方案2:

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

要么

解决方案3:

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

这将删除4th的行/root/.ssh/known_hosts到位(-i)。


1
这适用于root的.sshknown_hosts文件。不适用于/ var / lib / sss / pubconf / known_hosts,它是SSSD托管的文件,由远程服务器填充。
Mercury00

1
就我而言,由于某种原因,该问题发生在known_hosts * 2 *上。遵循这些步骤可以帮助我找到答案,谢谢@Sahil Gulati!
卢卡斯

11

我使用了模拟接口的解决方案,尽管sed -i并没有完成我通过用vim手动删除行来解决的方法:

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

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


1
是的,删除known_hosts文件中相同IP的记录将解决此问题。
2015年

尝试再次ssh时,SSSD会立即重新创建该条目。请注意,sss pubconfknown_hosts是一个托管文件,而不是本地服务器填充的某些本地存储库。
Mercury00

9

对于Mac用户,可以使用命令的-R标志ssh-keygen。快速示例:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESS是您要尝试使用的IP。然后您就可以连接好了。


8

这是因为您的远程计算机设置已更改。为此,删除您当前的密钥。

vim /root/.ssh/known_hosts

删除您要连接的IP的线路。


7

编辑 /home/hostname /.ssh/known_hosts,然后删除4行,然后保存。

然后ssh root@pong再次运行,您将看到如下消息:Are you sure you want to continue connecting (yes/no)? yes,仅打印yes

注意:如果遇到问题,请先阅读提示,这将有所帮助。


最佳答案实际上可以解释正在发生的事情。
普罗米修斯

6

这里的其他答案很好并且可以正常工作,无论如何,我通过删除解决了问题~/.ssh/known_hosts。当然可以解决问题,但这可能不是最佳方法。


6

就我而言,这是因为我以前与具有相同IP的机器建立了SSH连接(例如192.152.51.10)并且系统正在考虑先前主机的RSA密钥(存储在/home/user_name/.ssh/known_hosts中)。不匹配。

解决此问题,必须删除ip 192.152.51.10先前存储的RSA密钥

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10

4

使用此命令:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts

请添加说明该命令的作用和不做的事。
Daniel W.

6
为什么要截断文件?您将丢失所有信息,甚至包括已验证的信息。这是对单个更改的公共主机密钥采取行动的不好方法。
Daniel W.

1
这是一个完全的hack:D但它有效:D
Benjamin

提示:这也会删除所有其他主机信息。如果您正在计算机上运行自动脚本(如部署),则它们可能会中断,因为您必须手动重新确认所有主机密钥。只是为了向其他渴望使用最简单解决方案的用户发出警告。
Mateng

4

简单的一线解决方案,已在Mac上进行了测试:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

从已知主机中删除目标ssh主机IP。

其中212.156.48.110替换为目标主机IP地址。

原因:发生此事件是因为由于端口转发,目标IP已为另一台计算机所用。在连接之前删除目标IP将解决此问题。


3

使用以下命令从known_hosts中删除该条目:

ssh-keygen -R *ip_address_or_hostname*

这将从已知主机中删除有问题的IP或主机名文件中然后尝试重新连接。

从手册页:

-R hostname
从known_hosts文件中删除所有属于主机名的密钥。此选项对于删除散列主机很有用(请参见上面的-H选项)。


3

做就是了:

cd /home/user/.ssh/->这user是您的用户名,/home/jon/例如。

然后

gedit known_hosts & 并删除其中的内容。

现在ssh再次,它应该工作。


3

如果您尝试使用命令连接到端口2222上正在运行的docker容器,则会收到错误消息

mian@tdowrick2~$ ssh pos@localhost -p 2222

然后,要解决此问题,请在本地计算机(即主机而不是容器)上cd ~/.ssh/known_hosts使用文本编辑器打开文件。删除以开头的行[localhost]:2222并保存文件。现在尝试再次ssh

mian@tdowrick2~$ ssh pos@localhost -p 2222

错误会消失,但是每次容器重新启动时都必须执行此操作。


2

我的解决方案是:

  1. vi ~/.ssh/known_hosts
  2. 删除包含您要连接的IP的行。

这比删除所有 known_hosts


这是与下面的miota85相同的答案。
Daniel W.

2

仅客户端问题(ip的重复密钥):

解决变体:

要清除一个ip(默认端口22):

ssh-keygen -f -R 7.7.7.7

对于一个ip(非默认端口):

ssh-keygen -f -R 7.7.7.7:333

快速清除所有ip:

cd ~; rm .ssh/known_hosts

7.7.7.7 -SSH服务器IP连接

333 -非非标准端口


2

有时,由于某种原因,您需要重新安装服务器,通过ssh连接时,我们会发现您的服务器说标识已更改。如果我们知道这不是攻击,但是已经恢复了系统,则可以使用ssh-keygen从known_hosts中删除旧标识:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

再次连接时,我们将要求您验证新指纹:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes

1

我遇到了这个问题,原因很简单,我有一个重复的IP地址用于ssh登录,因此修改此问题后,一切都可以解决。


1

我的机器上有同样的错误,我清除了known_hosts文件,然后,它运行正常。


1
authorized_keys如果您有任何问题,不想删除known_hosts文件文件
jeb

0

解:

1-从“ $ HOME / .ssh / known_hosts”中删除指向无法连接的主机的行。

2-执行以下命令:ssh-keygen -R“ IP_ADDRESSorHOSTNAME”(用目标IP或目标主机名替换“ IP_ADDRESSorHOSTNAME”)

3-重试ssh连接(如果失败,请检查.ssh目录的权限,必须为700)


0

我在UBUNTU(Linux)上的解决方案:

1.您必须从“ /home/YOUR_USERNAME/.ssh/known_hosts”中的“ known_hosts”文件中删除内容

2.生成一个新的ssh密钥,例如“ ssh-keygen -t rsa -C“ your.email@example.com” -b 4096“

3.将新的ssh密钥复制粘贴到git存储库(在我的情况下为gitlab)的SSH密钥中。

这个对我有用 !


-1

AWS EC2。

在它给您的消息中找到IP。

vim /home/ec2-user/.ssh/known_hosts

使用箭头键从消息中找到IP,然后单击。

dd

这将删除该行,然后运行转义

:wp

这样可以节省您的一切。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.