错误类型:<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 客户端提示,表示连接到的远程主机的身份信息(通常是主机的公钥)与之前存储的身份信息不匹配。这可能表明远程主机的身份已经改变,或者存在中间人攻击的风险。
错误出现的原因
- 远程主机的公钥变更:远程主机可能重新安装了操作系统,或者更换了主机密钥。
- DNS劫持或中间人攻击:你连接到的主机可能不是预期的主机,而是攻击者伪装的主机。
- 连接到不同的主机:你可能连接到了一个不同的服务器,但使用了相同的主机名。
- 主机名解析变更:主机名可能指向了一个新的 IP 地址。
如何处理
处理这个警告需要谨慎,因为错误操作可能会导致安全风险。在确认原因后,可以采取以下步骤:
步骤 1:验证远程主机的身份
- 联系服务器管理员:确认主机密钥是否确实已经变更。
- 手动获取新密钥:通过安全的渠道获取远程主机的新公钥,并手动验证。
步骤 2:更新已知主机文件
- 找到并删除旧条目:
- 打开终端,编辑
~/.ssh/known_hosts
文件。 - 查找并删除相关的旧条目。
ssh-keygen -R hostname
例如,如果你连接的主机名是example.com
,则运行:sh复制代码ssh-keygen -R example.com
- 打开终端,编辑
- 重新连接:
- 尝试再次连接远程主机。
- 确认新主机密钥,并将其添加到
~/.ssh/known_hosts
文件中。
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 文件资源管理器 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/file-explorer.png)
Windows 文件资源管理器
该文件夹中的文件是 known_hosts。你可以用记事本(或你喜欢的文本编辑器)打开它。文件中会有一个键值列表:
![Windows 的 known_hosts 文件 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/windows-known-hosts.png)
Windows 的 known_hosts 文件
在这里,你可以删除导致问题的密钥,然后重新保存文件。
有些用户可能更喜欢 PuTTY 客户端。这些键值位于注册表中,但其作用与 OpenSSH 相同。
你需要打开 Windows 注册表编辑器(又称 “regedit”)。你可以用自己喜欢的方式打开,但最快捷的方法是在 Window 的搜索栏中输入应用程序的名称:
![Windows 开始菜单中的注册表编辑器链接 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/regedit.png)
Windows 开始菜单中的注册表编辑器链接
在此,在 regedit 中查找以下目标:
HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/SshHostKeys/
您将在此看到与计算机上保存的连接相关的条目列表。您的任务就是删除造成问题的连接:
![在 regedit 中删除注册表键值 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/regedit-host-keys-putty.png)
在 regedit 中删除注册表键值
点击 “Delete” 按钮后,还需要确认是否要删除该键:
![确认值删除对话框 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/putty-confirm.png)
确认值删除对话框
单击 “Yes” 意味着密钥将永远消失,你应该不会再收到 “Warning: Remote host identification has changed” 错误。
2. Mac
Mac 有几种修复 “警告:远程主机标识已更改 “错误的方法: 远程主机标识已更改 “错误–可以通过高级应用程序(如 SSH Config Editor)或终端。结果都是一样的,所以我们建议你选择更舒适(预算更充足)的方式。
我们的首选方法是在终端窗口(或 iTerm2,如果你使用该应用程序)中访问文件,并用专用的 Nano 或 Vim 编辑器打开它。这是因为,无论你的经验水平如何,每个人都可以访问并直接使用它。
在这里,我们将使用 Nano。首先,使用最舒服的程序打开终端:
![从 Spotlight 打开终端 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/spotlight-terminal.png)
从 Spotlight 打开终端
在窗口中运行 nano ~/.ssh/known_hosts
命令。这将打开一个新的 Nano 实例,并显示 known_hosts 文件中的密钥:
![使用 Nano 编辑器 known_hosts 文件 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/nano-known-hosts.png)
使用 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 从已知主机文件中删除 Warning: Remote Host Identification Has Changed 错误](https://static.wbolt.com/wp-content/uploads/2024/01/ssh-keygen-delete.png)
使用 ssh-keygen 从已知主机文件中删除
完成后,就不会再出现 “Warning: Remote host identification has changed” 错误。