ChatGPT解决这个技术问题 Extra ChatGPT

ssh 远程主机标识已更改

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

[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 并拥有 Fedora 19。如何解决此警告?

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

在 adrin 下面的评论中,freeipa 的正确答案是 here

刚刚发现如果您有 ip 地址冲突也可能发生此问题 nslookup your ip to debug this issue more
这里有一个僵局。这个被标记为重复,所以没有人可以添加答案,它链接的那个被标记为离题,所以没有人也可以在那里添加答案。如果您删除 known_hosts,它也将解决问题。
我有同样的问题。为了我和其他人的利益,这里是问题和我的答案:superuser.com/questions/1071204/…
作为希望首先验证其密钥的人,我发现此答案很有用。 askubuntu.com/a/83499/620623
正如 sharrajesh 提到的:检查您的 DNS 条目(在 FreeIPA 中对我来说)并查看您没有多个 A 条目的 IP 无法从网络访问。

P
Pablo Bianchi

这是最简单的解决方案

ssh-keygen -R <host>

例如,

ssh-keygen -R 192.168.3.10

ssh-keygen man page

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


我在 Windows 和这个解决方案上,删除密钥也不起作用,我还能尝试什么?
好吧,在 Windows 上,我需要为此使用来自 git bash 的终端(或任何 MingW32 终端)。棘手。
请记住,如果您通过特定端口连接,您可能必须使用 ssh-keygen -R [127.0.0.1]:3022 之类的语法删除。只需检查您的 .ssh/known_hosts 文件中明确说明的内容。
当我尝试这个时,我收到错误“ not found in ~/.ssh/known_hosts”
<host> 应与错误消息中的确切值一起使用,用单引号括起来以进行 shell 转义。例如:... host key for [example.com]:3422 has changed ... 变为 ssh-keygen -R '[example.com]:3422'
J
Jinna Balu

利用

ssh-keygen -R [hostname]

带有 IP 地址/主机名的示例将是:

ssh-keygen -R 168.9.9.2

这将从 known_hosts 更新您的主机的违规行为。您还可以使用 -f 标志提供 known_hosts 的路径。


删除对应键 $ ssh-keygen -R {server.name.com} | $ ssh-keygen -R {ssh.server.ip.address} | $ ssh-keygen -R server.example.com
没有解释的答案如何获得如此多的支持..没有安全问题,没有解释.... -1
它似乎也只是下面另一个答案的副本。请一个mod清理这个烂摊子......
主机名明确示例:ssh-keygen -R '[localhost]:2222'
@丹尼尔W。 2014 年 4 月 18 日的答案原本内容较少,但后来被编辑。
w
warvariuc

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

ssh-keygen -R [IP_ADDRESS]

太感谢了!我使用的是主机名,它只适用于 IP_ADDRESS :)
这为我做了,应该是公认的答案。我不知道为什么这个答案后来有两份副本,而且都有更多的赞成票。
你的不是同样的错误;您的服务器没有运行 SSSD。请参阅 OP。
A
Andy Hayden

大锤是一举移除所有已知主机:

rm ~/.ssh/known_hosts

我遇到了这个问题,因为我们使用来自跳转盒的短寿命服务器的小子网,并且经常重复使用共享相同 ssh 密钥的服务器的内部 IP 地址。


当接受的答案不起作用时,在流浪虚拟机上为我工作。
随身携带的有用工具,但这可能会使您面临中间人攻击(known_hosts 旨在防止的确切事情)。仅当您确信其中的 所有 主机都是安全的时才执行此操作。
这对我也有用,之后我通过运行 ssh sshuser@ 再次创建了主机文件,谢谢
m
mockinterface

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

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

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

4dOffending RSA ...known_hosts:4 的帐户上


谢谢,但我不知道为什么,但我删除了它,它又在里面了。我曾尝试停止 sssd 服务,但此效果消失了,但启动 sssd 后,它又出现了。
备份您的 ~/.ssh 目录,然后将其删除。在 ~/.ssh 被吹走之后,您的服务是否继续重新添加密钥?
我已将 .ssh 重命名为 .ssh_old,在新尝试连接后只需创建空目录 .ssh。而且我仍然无法使 /var/lib/sss/pubconf/known_hosts “可编辑”。
更便携的方法:sed -i -e 4d /var/lib/sss/pubconf/known_hosts
如果您希望重建服务器而不造成类似此错误消息的中断,您如何备份服务器的 identification
A
Alex

这是最简单的解决方案

使用 ssh-keygen 删除无效密钥

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

希望对你有帮助


如果 my server namelocalhost,并且以下命令给出 Host localhost not found in /home/user/.ssh/known_hosts,该怎么办?好的,它应该是 ssh-keygen -R [localhost]:port
f
fIwJlxSzApHEZIl

问题是您之前接受了与远程计算机的 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


这应该被标记为接受的答案。遵循这些步骤解决了我的问题,而 ssh-keygen -R [IP_ADDRESS] 对我不起作用。谢谢!
是的,其中一个不公平的案例,肯定是最佳答案。第 2 和第 3 个答案只是重复第 1 个说的话,而且他们都有一个不完整的解决方案。
如果我不确定远程计算机是否受到威胁怎么办?
S
Stephen Quan

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

ssh-keygen -R pong

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

ssh -oStrictHostKeyChecking=no root@pong

我用于 .ssh/config 的内容:Host ???? CheckHostIP no StrictHostKeyChecking no(3 行,从第 2 行开始列出)
C
Community

为我工作!

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

这表明您在第 1 行有一个违规的 RSA 密钥。 4

解决方案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

这将删除 /root/.ssh/known_hosts4th 行(-i)。


这适用于 root 的 .ssh known_hosts 文件。不适用于 /var/lib/sss/pubconf/known_hosts,它是由 SSSD 管理的文件,由远程服务器填充。
就我而言,由于某种原因,问题发生在 known_hosts*2* 上。遵循这些步骤帮助我找到了答案,感谢@Sahil Gulati!
3
3nrique0

我使用了 mockinterface 的解决方案,虽然 sed -i 不太好用我通过使用 vim 手动删除该行来解决它:

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

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


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

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

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

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


实际解释发生了什么的最佳答案。
t
tjespe

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


S
Sachith Muhandiram

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

vim /root/.ssh/known_hosts

删除您正在连接的 IP 行。


P
Prateek Joshi

在我的情况下,它发生是因为我之前与具有相同 ip(例如 192.152.51.10)的机器建立了 ssh 连接,并且系统正在考虑前一个主机的 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

H
Helton Malambane

简单的单行解决方案,在 mac 上测试:

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

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

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

原因:由于端口转发,另一台机器已经知道目标 IP。在连接之前删除目标 IP 将解决此问题。


K
Kishore

更新了你的 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"

M
Muktesh Kumar

使用这个命令:

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

请添加解释该命令做什么和不做什么。
为什么要截断文件?您会丢失所有信息,甚至是您已经验证过的信息。这是针对单个更改的公共主机密钥采取行动的糟糕方法。
提示:这也会删除所有其他主机信息。如果您在机器上运行自动化脚本(如部署),它们可能会中断,因为您必须手动重新确认所有主机密钥。只是为了向这里渴望使用最简单解决方案的其他用户发出警告。
M
Mian Asbat Ahmad

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

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

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

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

错误会消失,但每次容器重新启动时都必须这样做。


B
Boris Karloff

我使用 Windows 10 PowerShell 进行 ssh 连接。我的问题是在 Windows C:\Users\youruser.ssh 中删除文件 known_hosts ,仅此而已。


a
aircraft

我的解决方案是:

vi ~/.ssh/known_hosts 删除包含您想要连接的 ip 的行。

这比删除所有 known_hosts


这与下面的 miota85 答案相同。
C
Chaminda Bandara

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

ssh-keygen -R *ip_address_or_hostname*

这将从 known_hosts 文件中删除有问题的 IP 或主机名并尝试再次连接。

从手册页:

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


B
BrennQuin

有时候,如果出于某种原因需要重新安装服务器,通过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

这是最好的答案,因为它实际上告诉我发生了什么以及我为什么这样做
S
Srivatsan

做就是了:

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

然后

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

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


M
Mahmud

最终解决方案!

由于存储的 ECDSA 密钥无效,因此显示。因此,我们必须使用以下命令从我们的主/控制器机器中删除 ECDSA 密钥:

ssh-keygen -R 192.168.0.132

这里 192.168.0.132 是远程系统 IP。


F
Fan

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


F
Fortran

只有客户端问题(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 - 非标准端口


G
GoingMyWay

我在我的机器上遇到了同样的错误,我清除了 known_hosts 文件,之后它就可以正常工作了。


当您遇到 known_hosts 文件问题时,您不想删除您的 authorized_keys
N
Niranjan Mahesh

只需清除 /home/{username}/.ssh/known_hosts 中存在的 known_hosts

vi /home/{username}/.ssh/known_hosts 

删除已知主机中的每一行并退出,然后您将能够登录。

或者

运行这个命令

ssh-keygen -R "hostname/ip_address" 

D
DarkSkieS

解决方案:

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

2- 执行这个命令: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (用你的目标 ip 或目标主机名替换 "IP_ADDRESSorHOSTNAME")

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


D
Dionis Oros

我在 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 密钥中。

这个对我有用 !