如何修复 “Warning: Remote Host Identification Has Changed” 错误

错误类型:
其他错误
错误名称:
警告:远程主机标识已更改
英文名称:
Warning: Remote host identification has changed
错误描述:
如果客户端认为这些指纹与它理解的正确指纹不同,你就会收到 "Warning: Remote host identification has changed" 错误。

如何修复 "Warning: Remote Host Identification Has Changed" 错误

安全的互联网连接不仅是理想状态,而且是必不可少的。事实上,我们甚至可以说这是网站的第一要务。警告: 远程主机标识已更改 “错误可保护您的连接免受某些恶意攻击,但在某些情况下,您也可能无意中导致该错误。

该错误与安全壳(SSH)密钥和客户端将检查的服务器 “指纹” 有关。如果 Secure Shell 认为有问题,它就会阻止对服务器的访问并产生错误。但你只需几步就能解决这个问题。

在接下来的几分钟里,我们将向你展示如何修复 “Warning: Remote host identification has changed(警告:程主机标识已更改)” 错误。首先,让我们来详细介绍一下错误信息本身。

什么是 “Warning: Remote Host Identification Has Changed” 错误?

连接网络服务器最安全的方法之一是使用 SSH。这是一种命令行工具,能让你安全地访问不安全的网络。可以把它看成是一种 “超级 SFTP” 类型的设置,尽管在实践中并不能进行 1:1 的比较。

只要有正确的登录凭证,你几乎可以在任何可以使用互联网的地方访问你的网站。此外,大多数 MacOS 和 Linux 机器的操作系统(OS)都内置了 SSH 客户端。对于 Windows,你需要使用一个专用界面(稍后我们将详细讨论)。

至于 “警告: 远程主机标识已更改 “错误,这与客户端将进行的安全检查有关。SSH 连接使用专用 “密钥”(存储在计算机上的小文件)作为身份验证。这有点像安全套接字层(SSL)握手,事实上,SSH 和 SSL 之间有一些高层次的相似之处。

密钥的作用之一是提供主机服务器的永久指纹。这将确保连接准确无误,不会受到 “中间机器” 攻击

如果客户端认为这些指纹与它理解的正确指纹不同,你就会收到 “Warning: Remote host identification has changed” 错误:

[user@hostname ~]$ ssh root@user
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
xx:xx:xx.
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 user has changed and you have requested strict checking.
Host key verification failed.

就错误而言,这是一个详细而清晰的错误-它会告诉你发生了什么、可能的原因以及如何修复。

不过,在向你展示如何修复 “Warning: Remote host identification has changed” 错误。

已知主机文件如何帮助 SSH 验证

你会发现,错误信息中提到了一个 known_hosts 文件。从文件名就能看出它包含的内容,但为了清楚起见,它是计算机已知的 SSH 远程主机列表。它被用作身份验证过程中的参考客户端文件。

第一次连接服务器时,你通常会在界面上收到一个确认请求,询问你是否要连接。如果要连接,该指纹就会成为 known_hosts 文件的一部分。

当然,如果该指纹与 known_hosts 文件中的指纹不同,则可能表明有恶意用户正在攻击你。在其他情况下,你可能已经知道为什么会出现差异,但无论如何都要保持警惕。

如何修复 “Warning: Remote Host Identification Has Changed” 错误

您可以修复 Windows 和 macOS 都会出现 “Warning: Remote host identification has changed” 错误。不过,在 Mac 上这样做的灵活性更大。

从 Windows 开始,我们将介绍许多可以恢复正常的方法。

注:除非你完全确信问题不是恶意的,否则不要尝试修复错误。如果你确定你的连接不存在安全隐患,下面的步骤就是为你准备的。

1. Windows

需要注意的是,Windows 机器可能没有 known_hosts 文件。但如果使用 OpenSSH 客户端,则会有一个文件。要找到它,请打开 Windows 搜索栏,使用 %USERPROFILE% 命令导航到用户文件夹。

这将在文件资源管理器中打开该目录。其中还会有一个 .ssh 文件夹:

Windows 文件资源管理器

Windows 文件资源管理器

该文件夹中的文件是 known_hosts。你可以用记事本(或你喜欢的文本编辑器)打开它。文件中会有一个键值列表:

Windows 的 known_hosts 文件

Windows 的 known_hosts 文件

在这里,你可以删除导致问题的密钥,然后重新保存文件。

有些用户可能更喜欢 PuTTY 客户端。这些键值位于注册表中,但其作用与 OpenSSH 相同。

你需要打开 Windows 注册表编辑器(又称 “regedit”)。你可以用自己喜欢的方式打开,但最快捷的方法是在 Window 的搜索栏中输入应用程序的名称:

Windows 开始菜单中的注册表编辑器链接

Windows 开始菜单中的注册表编辑器链接

在此,在 regedit 中查找以下目标:

HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/SshHostKeys/

您将在此看到与计算机上保存的连接相关的条目列表。您的任务就是删除造成问题的连接:

在 regedit 中删除注册表键值

在 regedit 中删除注册表键值

点击 “Delete” 按钮后,还需要确认是否要删除该键:

确认值删除对话框

确认值删除对话框

单击 “Yes” 意味着密钥将永远消失,你应该不会再收到 “Warning: Remote host identification has changed” 错误。

2. Mac

Mac 有几种修复 “警告:远程主机标识已更改 “错误的方法: 远程主机标识已更改 “错误–可以通过高级应用程序(如 SSH Config Editor)或终端。结果都是一样的,所以我们建议你选择更舒适(预算更充足)的方式。

我们的首选方法是在终端窗口(或 iTerm2,如果你使用该应用程序)中访问文件,并用专用的 NanoVim 编辑器打开它。这是因为,无论你的经验水平如何,每个人都可以访问并直接使用它。

在这里,我们将使用 Nano。首先,使用最舒服的程序打开终端:

从 Spotlight 打开终端

从 Spotlight 打开终端

在窗口中运行 nano ~/.ssh/known_hosts 命令。这将打开一个新的 Nano 实例,并显示 known_hosts 文件中的密钥:

使用 Nano 编辑器 known_hosts 文件

使用 Nano 编辑器 known_hosts 文件

删除导致 “Warning: Remote host identification has changed” 错误的密钥,然后保存更改。

你可能还想删除整个 known_hosts 文件,尤其是当你只在一两个网站上使用 SSH 时。为此,你可以在终端窗口中运行 rm .ssh/known_hosts

在 Mac 上还有一种修改 known_hosts 文件的方法:在命令行中使用 ssh-keygen 工具。如果你不想深入研究文件本身,或者只想使用一个网站或密钥,那么这种方法就很不错。

为此,请打开终端窗口并运行 ssh-keygen,然后输入服务器主机名。例如

ssh-keygen -R server.example.com

这不会问你是否要删除指定的行,所以在继续之前要确保你删除的是正确的行:

使用 ssh-keygen 从已知主机文件中删除

使用 ssh-keygen 从已知主机文件中删除

完成后,就不会再出现 “Warning: Remote host identification has changed” 错误。

小结

网络安全不仅仅是安装插件和创建一个强大的密码。登录服务器时所使用的连接也需要高度注意。如果不想遭受中间人机器攻击,就应该在登录时使用 SSH 访问。

不过,这个系统几乎太好用了。你可能会收到 “Warning: Remote host identification has changed” 错误的原因有很多,有些是无辜的。

无论如何,你都可以通过命令提示符或终端,使用少量命令立即修复错误。

评论留言