Warning: Remote Host Identification Has Changed 错误


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

“Warning: Remote Host Identification Has Changed” 是一个 SSH 客户端提示,表示连接到的远程主机的身份信息(通常是主机的公钥)与之前存储的身份信息不匹配。这可能表明远程主机的身份已经改变,或者存在中间人攻击的风险。

错误出现的原因

  1. 远程主机的公钥变更:远程主机可能重新安装了操作系统,或者更换了主机密钥。
  2. DNS劫持或中间人攻击:你连接到的主机可能不是预期的主机,而是攻击者伪装的主机。
  3. 连接到不同的主机:你可能连接到了一个不同的服务器,但使用了相同的主机名。
  4. 主机名解析变更:主机名可能指向了一个新的 IP 地址。

如何处理

处理这个警告需要谨慎,因为错误操作可能会导致安全风险。在确认原因后,可以采取以下步骤:

步骤 1:验证远程主机的身份

  1. 联系服务器管理员:确认主机密钥是否确实已经变更。
  2. 手动获取新密钥:通过安全的渠道获取远程主机的新公钥,并手动验证。

步骤 2:更新已知主机文件

  1. 找到并删除旧条目
    • 打开终端,编辑 ~/.ssh/known_hosts 文件。
    • 查找并删除相关的旧条目。
    或者使用以下命令删除特定的主机条目:sh复制代码ssh-keygen -R hostname 例如,如果你连接的主机名是 example.com,则运行:sh复制代码ssh-keygen -R example.com
  2. 重新连接
    • 尝试再次连接远程主机。
    • 确认新主机密钥,并将其添加到 ~/.ssh/known_hosts 文件中。
    sh复制代码ssh user@example.com 你会看到一个提示,询问是否信任新的主机密钥:sh复制代码The authenticity of host 'example.com (192.168.1.1)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? 输入 yes 并继续。

注意事项

  • 谨慎处理:每次遇到这个警告都需要小心处理,确保没有中间人攻击的风险。
  • 定期备份:定期备份你的 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,如果你使用该应用程序)中访问文件,并用专用的?Nano?或?Vim?编辑器打开它。这是因为,无论你的经验水平如何,每个人都可以访问并直接使用它。

在这里,我们将使用 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” 错误。