VPS提示REMOTE HOST IDENTIFICATION HAS CHANGED怎么办?先核对指纹再删known_hosts

这不是普通缓存提示;删除旧记录之前,先通过控制台或可信渠道核对新主机指纹
发布于
7

SSH连接VPS时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,表示服务器当前提供的主机密钥,与本地known_hosts中保存的记录不一致。它可能由VPS重装、SSH主机密钥重建、域名解析变化或公网IP被重新分配引起,也可能意味着连接被劫持或目标服务器被冒充。

不要看到报错就删除整份known_hosts,也不要通过关闭StrictHostKeyChecking强行登录。先确认服务器是否发生过预期变更,再从服务商控制台或另一条可信管理路径读取新指纹,核对一致后才更新本地记录。

这个警告保护的是什么

SSH主机密钥用于证明远端服务器身份。第一次连接时,客户端会显示服务器公钥指纹,并在用户确认后写入~/.ssh/known_hosts。以后再连接同一主机,SSH会对比当前密钥与历史记录。

OpenSSH在主机标识改变时发出警告,并限制不安全的继续连接,是为了降低服务器伪装、DNS欺骗或中间人攻击绕过加密保护的风险。这个检查与用户登录用的密码、私钥不是同一个概念:用户密钥证明“你是谁”,主机密钥证明“服务器是谁”。

先判断变更是否符合预期

近期事件 主机密钥变化是否可能正常 仍需检查什么
刚重装VPS系统 可能正常 控制台中的新指纹、重装时间和目标IP
恢复整机快照或更换实例 可能变化,也可能恢复旧密钥 快照来源、实例标识和密钥生成时间
公网IP释放后重新购买 很可能对应另一台主机 新实例归属和当前控制台地址
域名修改了A或AAAA记录 可能连到新服务器 DNS结果、IPv4/IPv6和变更记录
没有任何维护或变更 不应直接忽略 DNS劫持、路由异常、账号和服务器安全事件

如果警告发生在维护窗口之外,先停止输入密码、验证码和私钥口令。保存提示中的主机名、IP、密钥类型、旧新指纹和known_hosts行号,作为后续核对线索。

从可信路径读取服务器主机指纹

优先使用云服务商提供的VNC、串行控制台或网页控制台登录服务器。这条路径不依赖当前有疑问的SSH连接。然后读取各主机公钥指纹:

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
sudo ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
sudo ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

服务器不一定同时启用这些算法,不存在的文件会报错。将实际存在且SSH正在使用的密钥指纹,与客户端警告或首次重连提示逐字符核对。不要仅通过同一条不可信网络上的聊天消息获取指纹,否则验证路径仍可能被同时影响。

确认无误后,只删除目标主机的旧记录

先查找本地known_hosts中的匹配项:

ssh-keygen -F server.example
ssh-keygen -F 203.0.113.10

确认目标主机确实已经合法更换密钥后,再移除对应记录:

ssh-keygen -R server.example
ssh-keygen -R 203.0.113.10

如果使用非默认端口,known_hosts中的标识可能是[server.example]:2222

ssh-keygen -R "[server.example]:2222"

ssh-keygen -R会针对指定主机更新known_hosts,比删除整份文件更可控。执行前可备份该文件,避免影响其他服务器的身份记录。

重新连接时,再核对一次新指纹

ssh user@server.example

客户端会把目标视为首次连接并显示新指纹。只有当它与可信控制台读取的结果一致时,才接受并写入新记录。如果不一致,应立即停止,继续检查DNS、代理、跳板机配置、~/.ssh/config中的HostName以及IPv4和IPv6是否指向不同服务器。

为什么不应把StrictHostKeyChecking设为no

StrictHostKeyChecking控制未知或已变更主机密钥的处理方式。将其关闭可能让自动化连接跳过关键身份确认,使错误的目标服务器更容易被接受。它不是修复主机密钥变化的工具,只是改变客户端面对风险时的行为。

自动化系统若需要非交互连接,应使用受控的known_hosts分发、配置管理或主机证书,而不是把检查永久关闭。新主机与已变更主机也应区别处理:可以自动接受全新主机,不代表应该自动接受历史身份发生变化的主机。

还可能是主机名、IP和跳板配置对不上

  • 同一域名的A记录与AAAA记录指向不同实例,而两台服务器没有统一主机密钥;
  • SSH配置中的Host别名映射到了新的HostName
  • 通过堡垒机、负载均衡或NAT连接时,后端实例发生轮换;
  • 多个服务器共用同一公网IP和不同端口,本地删除了错误的条目;
  • 服务商回收IP后分配给新客户,本地仍保存上一台VPS的密钥。

如果SSH连接还同时出现超时、断线或Broken pipe,应分开处理。主机密钥警告属于身份验证问题;已登录后的连接中断可按VPS SSH断线与保活排查方法检查。

服务器没有预期变更时怎样扩大排查

  1. 暂停SSH登录,避免向未知目标提交认证信息;
  2. 从云平台控制台确认实例ID、公网IP、开机时间和近期操作记录;
  3. 检查域名A、AAAA记录以及本地DNS返回;
  4. 从两条获准网络对比解析结果和SSH指纹;
  5. 检查云账号登录、API操作、快照和重装记录是否异常;
  6. 在控制台中查看sshd配置、主机密钥文件时间和系统日志;
  7. 若怀疑账号或实例失陷,按事件响应流程隔离、保留证据并轮换凭据。

若维护操作还涉及系统镜像或CPU架构变化,可结合VPS重装后程序架构与执行格式排查核对新环境,但不要把应用报错与主机身份警告混为同一原因。

结论

REMOTE HOST IDENTIFICATION HAS CHANGED不是普通缓存提醒,而是SSH发现服务器身份与历史记录不一致。先判断重装、IP复用或DNS变更是否符合预期,通过可信控制台核对新指纹;确认无误后,仅移除目标主机的旧known_hosts条目并重新接受新密钥。没有预期变更时,应把它当作潜在安全事件继续调查,而不是关闭检查强行连接。

常见问题(FAQ)

VPS重装系统后出现主机密钥变更警告正常吗?
重装系统通常会重新生成SSH主机密钥,因此警告可能符合预期。但仍应通过服务商控制台或其他可信渠道读取新指纹,与SSH提示核对后再更新本地记录。
可以直接运行ssh-keygen -R删除旧记录吗?
该命令可以移除指定主机在known_hosts中的旧记录,但删除本身不能证明新服务器可信。应先确认变更原因并核对新指纹,再重新连接和接受新密钥。
把StrictHostKeyChecking设为no能解决吗?
它可能绕过检查,却削弱了SSH识别服务器冒充和中间人攻击的能力,不应作为常规修复。正确做法是确认目标身份并更新可信记录。
同一个IP换了一台VPS为什么也会报警?
known_hosts会把主机名或IP与主机密钥关联。IP被重新分配给另一台服务器后,新服务器使用不同密钥,SSH就会发现不一致。这是需要核实的新身份,而不是无意义报错。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600