Ubuntu-ssh - - 警告:远程主机身份验证已更改

65

我无法通过ssh和rsync连接到远程系统,它持续给出以下错误信息:

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
a3:8f:7c:07:c9:12:d8:aa:cd:c2:ba:b3:27:68:bc:c2.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:8
RSA host key for xxx.xxx.xxx.xxx has changed and you have requested strict checking.
Host key verification failed.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(601) [sender=3.0.8]

我已经从 /home/user/.ssh 目录下删除了 authorized_keys 文件。


请检查rsync错误信息,ssh:无法连接到主机xxx.xxx.xxx.xxx端口22:连接被拒绝 rsync:连接意外关闭(迄今收到0字节)[发送方] rsync错误:在io.c(601)处出现未解释的错误(代码255)[sender=3.0.8] - Thiyagarajan Varadharaj
如果这不是生产系统, 那么你可以执行 "truncate -s 0 /root/.ssh/known_hosts" 命令。 - user1642018
1
https://in.godaddy.com/help/ssh-login-warning-remote-host-identification-has-changed-12161 - Nandhakumar Kittusamy
5个回答

130

使用以下命令,可以从 .ssh/known_hosts 文件中删除旧的密钥

ssh-keygen -R <host>

5
如果你在谷歌搜索中寻找答案,想知道为什么突然无法访问你的vagrant box,那么这篇回答会帮到你。当启动一个新的不同的vagrant box时,该box可能会生成一个新的rsa-key,它将与以前为同一本地主机注册的rsa-key不同。如果是这种情况,可以相信这个更改只是一种麻烦,你可以删除旧的无效密钥。 - andkrup
1
不仅适用于Vagrant,如果您重新安装计算机,则密钥将更改。这似乎是最清洁和最安全的解决方案。 - Mongus Pong
如果这不起作用,你有什么尝试的想法吗?! - Stefan
命令未找到错误? - Talespin_Kit
@Talespin_Kit 在我的情况下,它并没有被删除:ssh-keygen -R localhost -> /Users/user/.ssh/known_hosts updated. 但该字符串并未被删除。 - skywinder

75
这个消息说的是“/root/.ssh/known_hosts”而不是authorized_keys。 请删除这个文件(或者至少相应的密钥),然后您就可以继续了!但是请注意:密钥更改肯定有原因。系统是否已重新安装?请确保检查或者整个SSH的想法将无效。
另外,你作为root用户ssh登录有理由吗?

删除相应的密钥 $ ssh-keygen -R {server.name.com} | $ ssh-keygen -R {ssh.server.ip.address} | $ ssh-keygen -R server.example.com - DaddyMoe
@Nikodemus 你好,当我删除 ssh-keygen -f "/root/.ssh/known_hosts" -R instance_ip 后,现在显示错误 Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 我该怎么处理? - awhitesong

22

这条消息已经解释了它本身的含义:

  • 远程主机通过密钥进行身份验证
  • 你之前保存的该主机的密钥与现在不同
  • 因此,有可能远程主机并非其所声称的那样

如果你信任远程主机,可以从/root/.ssh/known_hosts文件中删除第8行,下次连接时ssh会询问是否添加新密钥。

如果你不信任远程主机,你需要联系主机管理员以查明他们是否更改了ssh密钥,以及为什么。如果他们没有更改,则意味着你的流量正在被拦截。

另一方面,如果你真的非常信任远程主机(例如它位于内部网络),你可以使用ssh命令运行。

-oBatchMode=yes -oStrictHostKeyChecking=no

12

您可以使用sed命令从known_hosts文件中的第8行删除有问题的密钥:

sed -i -e 8d /root/.ssh/known_hosts

是的,这个命令对我有用! :-)
sed -i -e 36d known_hosts
- Darby

9

只需要这样做:

mv .ssh/known_hosts .ssh/known_hosts_old

1
迄今为止最好的答案! - Jim
15
当问题只涉及单个主机时,没有必要删除整个文件。 - Jian
2
这似乎是对那些不熟悉ssh和主机密钥工作原理的人提出的不明智建议。你能在回答中增加更多细节,说明这样做会有什么影响吗? - John Zumbrum
2
同意@Jian的观点,这种方法会破坏之前正常运行的其他主机,并要求您重新信任远程服务器。如果您正在使用任何批处理脚本/自动化程序,则不是一个好的选择。 - Eddie

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