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


42

我有一台Linux服务器,无论何时连接它,它都会显示更改SSH主机密钥的消息:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @警告:远程主机标识已更改!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@可能有人在做某些NASTY!可能有人正在偷听您(中间​​人攻击)!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的连接已关闭。

有谁知道发生了什么事以及我可以做些什么来解决这个问题?


Answers:


68

请不要像某些人所建议的那样删除整个known_hosts文件,这完全会使警告的内容无效。这是一项安全功能,用于警告您可能发生了中间攻击。

我建议您确定为什么会发生某些变化,最有可能是SSH升级由于可能的安全漏洞而更改了加密密钥。然后,您可以从known_hosts文件中清除该特定行:

sed -i 377d ~/.ssh/known_hosts

d eletes线377在警告冒号后如图所示:

/home/emerson/.ssh/known_hosts:377

或者,您可以通过执行以下操作来删除相关密钥

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

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


由于一键不匹配,不会删除超过350台服务器。知道为什么它会继续关闭连接吗?
setatakahashi

删除相关的known_hosts记录后,是否还无法解决?如果没有,您能否以详细模式运行ssh客户端并将其粘贴到某个位置。
亚当·吉本斯

1
正因为主机密钥无效,它正在关闭计算机。如果您对安全性很认真,则需要与服务器管理员联系,以确保主机密钥是出于正当理由而更改的。如果是这样,则可以替换它,如Adam所述。
马修·弗拉申

我遵循了您的建议,但是$ sed -i“ 46 d”〜/ .ssh / known_hosts sed:1:“ /Users/myusr/.ssh ...”:l命令末尾的多余字符,因此我用vim,它的工作原理。谢谢!
路易斯·拉米雷斯·蒙特罗萨

3
亚当的语法几乎是正确的,但是您需要在“ 377”和“ d”之间留一个空格。同样,在OS X中,已知主机位于〜/ .ssh / known_hosts中;请注意缺少“。” 在文件名中。
ktappe 2015年

27

我认为,尽管此处的某些答案解决了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
+1,因为此帖子实际上解决了错误消息的严格检查部分。
Shibumi

1
我也+1,以解决问题的内容。根据因素,可能还有更多工作要做。这种方法将主机检查从“严格”降级为​​“某些”(我的术语)。在我的情况下,ssh被允许阻止我登录,因为我要登录的方式是输入密码,并且由于“某些”主机检查而被禁用。因此,您必须直接引导ssh将/ dev / null用作“ UserKnownHostsFile”。这会将主机检查设置为“无”,并且上面的DIRE WARNINGS适用,因此不要全局或永久进行检查。
卡迪夫太空人

这确实是一个优雅的解决方案。感谢分享!
LeOn-韩立

10

仅在单个服务器上需要删除StrictHostKeyChecking的另一种方法:

ssh <server> -o StrictHostKeyChecking=no

将允许您登录,但不能永久解决该问题。
安德烈斯·卡内拉

当我这样做时,它使我有机会添加密钥,这将永久解决问题
Greg Dougherty

也许我们有不同的问题?我正在连接到以前具有不同IP的服务器。
安德烈斯·卡内拉

如果您的服务器的数据已更改,则需要从已知主机文件中将其删除(首先确定更改正确无误),然后添加其新信息。如果您有新服务器,则-o将使您连接到服务器并添加其信息。
格雷格·多尔蒂

我认为将StrictHostKeyChecking在配置中设置为YES是一种好习惯,并且仅当您知道要连接到新服务器或已更改旧服务器上的密钥时才使用此开关。
mohak

5

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

其次,打开ssh调试,

ssh -vvv user@host

并查看提示信息,也可以尝试在试图连接的服务器上查找/ var / log / secure和/ var / log / messages以获取线索,sshd会提供良好的错误消息。

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


1
为根登录评论+1
Fahad Sadah 2010年

发生此错误所需要做的就是重新映像目标计算机。如果您要连接到DMZ一侧的目标,则发生MitM攻击的可能性很小。
ktappe

3

之所以会收到此消息,是因为某些更改(例如新的NIC,新的IP,服务器软件的更改等)。安全焦点有一篇不错的文章,关于SSH主机密钥保护

只需通过编辑$HOME/.ssh/known_hosts文件从服务器上删除密钥(使用SFTP或类似工具),并在下次连接时接受新密钥。

由于StrictHostKeyChecking设置,您的连接可能已断开。有关类似问题,请参见此线程


2
不,请不要这样做。这完全使此功能提供的所有安全性失效。请仅删除已更改的特定密钥,而不是所有已知主机。
亚当·吉本斯

5
我不建议删除known_hosts文件,建议对其进行编辑,然后从中删除密钥。

哎呀,对不起,读错了。
亚当·吉本斯

2
当然,此消息不能由新IP地址触发,更不能由新NIC触发。参见亚当·吉本斯的正确答案。
2009年

1
在您投反对票之前(我发现人们对此非常满意),请进行研究。阅读此安全焦点文章,securityfocus.com / infocus / 1806 。我引用一小段话:“为什么要更改主机密钥?您希望连接的计算机已移至其他DNS名称或IP地址,或者完全由新的DNS替换。” 如果答案非常错误,请允许改正。毕竟,这是一个Wiki。

3

作为“主机” [广泛定义,它可能是从重新安装/多重启动到完全不同的计算机(例如,您之前连接过IP地址的计算机)的所有内容,例如ssh客户端似乎已更改,它为您提供了错误。

不必关闭严格的检查,也不必批量删除已保存的密钥。

对于一个特定的主机名或IP地址,很有可能在known_hosts中列出了两个不同的密钥。根据您是否认为您可能需要当前存储在known_hosts中的“旧”密钥为您提供两种选择

要么在OP的known_hosts的l377处删除它所指的特定密钥,要么同时保留两者

避免删除已知主机中的密钥的最简单方法是

  1. 编辑known_hosts,以在已知_hosts [@ l377]中临时引用的“旧”条目的开头添加#
  2. 连接[ssh到主机],同意提示“自动”添加新密钥
  3. 然后重新编辑known_hosts以删除#

有关“在known_hosts中添加正确的主机密钥” /每个主机名有多个ssh主机密钥的更多答案


我不知道这两个键的技巧。这不是记录的行为,对吗?
hackerb9
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.