重装 VPS 后,SSH 终端突然显示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,并不一定代表服务器遭到攻击,但也不能直接忽略。它表示:这次服务器提供的主机公钥,与客户端此前保存的记录不一致。正确顺序是先确认服务器身份,再更新本机记录。
一、为什么重装 VPS 后会出现这个提示?
SSH 客户端会把曾经接受的服务器公钥保存在 ~/.ssh/known_hosts 中。以后再次访问同一个主机名或 IP 时,会对比当前服务器送来的公钥。若不一致,连接可能被阻止,以免误连到冒充原服务器的设备。
常见的正常原因包括:VPS 重装系统后重新生成 SSH 主机密钥、云主机迁移并换用另一套系统镜像、IP 被运营商重新分配到不同实例。异常原因则可能是 DNS 指向变化、代理配置问题或连接被劫持。只凭出现警告,无法区分是哪一种。
如果你还需要排查更一般的连不上服务器问题,可参考本站的 服务器 SSH 连接失败诊断指南;本文专门处理“主机密钥不匹配”,不要把它和密码错误、端口未开放混为一谈。
二、先不要做的两件事
- 不要直接关闭主机身份检查。 在不确认对端身份的情况下使用
StrictHostKeyChecking=no,等于绕过了这道警告机制。 - 不要一看到提示就删光整个 known_hosts 文件。 这样会丢失其他服务器的信任记录,也不能证明当前目标安全。
请先记录终端提示的目标 IP / 域名、端口、密钥类型以及以 SHA256: 开头的指纹;暂时不要输入密码或其他敏感信息。
三、如何独立核实新的 SSH 主机密钥?
最可靠的实用做法,是使用云服务商提供的网页控制台、VNC/串口控制台,或你本来就信任的管理通道进入 VPS,直接查看服务器本地保存的公钥指纹。这里的关键不是“从同一条 SSH 连接再问一次”,而是通过独立可信的渠道核对。
在服务器的控制台执行以下命令(适用于安装了 OpenSSH 且存在 Ed25519 主机公钥的常见 Linux 系统):
sudo ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ed25519_key.pub
这会输出服务器本机 Ed25519 主机公钥的 SHA-256 指纹。将它与你正在建立的 SSH 连接弹出的同类型指纹逐字比对。若终端提示的是 RSA 或 ECDSA 主机密钥,应查看对应类型的公钥文件,不能拿不同密钥类型的指纹相互比较。
如果无法通过可信控制台取到指纹,或者服务商没有提供可信的独立核验方式,请暂停连接并向服务商确认。仅用 ssh-keyscan 抓取公网返回的密钥并不能独立证明服务器身份。
四、确认安全后,怎样更新 known_hosts?
确认实例变更及指纹无误后,再在你自己的电脑/SSH 客户端上处理旧记录。建议先保留一份备份:
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.backup
查找已保存的旧记录(示例用文档保留域名,实际请替换为自己的主机地址):
ssh-keygen -F vps.example.com
当已完成身份核验,可以只移除这个主机对应的旧记录:
ssh-keygen -R vps.example.com
如果使用非默认 SSH 端口,如 2222,需要使用带方括号的地址形式:
ssh-keygen -R '[vps.example.com]:2222'
随后重新发起正常连接:
ssh -p 2222 [email protected]
首次看到新的主机指纹时,再检查一次是否与独立渠道查到的结果一致,确认无误才接受。这一步的顺序不能倒过来。 若你平时是通过 IP 地址直接连接,同样需要对那个 IP 的旧记录分别核查;如果域名和 IP 都曾单独记录,还应注意提示究竟匹配哪一条。

五、核实失败或仍然报错,怎么判断?
| 遇到的情况 | 建议下一步 |
|---|---|
| 近期确实重装 VPS,控制台指纹与 SSH 提示一致 | 备份并仅更新目标主机记录,再次正常连接 |
| 没有重装,也没有更换 IP | 暂停连接,检查 DNS/控制台实例与服务商通知 |
| 能在控制台查看指纹,但与客户端提示不同 | 不要接受密钥,排查连接目标和网络路径 |
| 移除旧记录后仍提示变化 | 确认连接使用的是域名还是 IP、是否使用自定义端口、是否还有其他 known_hosts 路径 |
| 提示 Permission denied | 这是账户认证问题,不是主机密钥验证;分开检查用户名、公钥权限与认证配置 |
如果要进一步了解 SSH 登录方式、端口和安全设置,可看本站的 Linux SSHD 安全远程登录指南。主机密钥负责验证“正在连接谁”,用户私钥则通常用于证明“你是谁”,两者不是同一个概念。
六、最短安全处理流程
- 记录警告中显示的 IP、端口、主机密钥类型与 SHA-256 指纹。
- 使用 VPS 管理控制台确认实例是否重装,并读取本机主机公钥指纹。
- 指纹匹配后,备份本地
known_hosts,用ssh-keygen -R定点移除旧记录。 - 重新连接并核对新指纹,不匹配就停止操作并联系服务商。
这种方式比“报错了直接删除 known_hosts”稍多一步,却能保留 SSH 的主机身份验证价值。相关机制可参考 Oracle Linux 的 known_hosts 文档 与 ssh-keygen 命令手册。





交流与讨论