SSH主机指纹变化后如何安全重连

出现 REMOTE HOST IDENTIFICATION HAS CHANGED 时,客户端发现当前主机密钥与保存记录不一致。重装系统、更换IP对应实例或主机密钥轮换都可能触发,也可能连接到了错误目标。先验证身份,再更新记录;不使用StrictHostKeyChecking=no来消除警告。

记录警告与近期变更

  1. 记录实际连接的域名/IP、端口、账号、警告中的密钥算法和SHA256指纹。
  2. 确认近期是否重装系统、迁移实例、变更DNS或轮换过主机密钥,并核对当前地址仍对应你要管理的实例。
  3. 通过可信控制台或已确认安全的管理通道,在目标系统内读取同一种算法的主机公钥指纹。不能只在出现警告的连接上重新输入密码来“验证”。
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E sha256

这条命令在可信目标服务器执行,仅适用于确认警告对应Ed25519主机密钥的场景。RSA或ECDSA警告要核对对应类型的公钥文件,不能拿不同算法指纹比较。ssh-keyscan可以采集网络返回的密钥,但单靠同一路径采集结果不能证明对方身份。

在本地查看命中的旧记录

ssh-keygen -F 203.0.113.10
ssh-keygen -F '[203.0.113.10]:2222'

默认22端口通常按主机名或IP查找;自定义端口用方括号主机加冒号端口的形式。连接使用域名时还要按实际域名检查对应记录,示例IP与2222必须替换。known_hosts可能采用哈希保存,使用ssh-keygen查询比人工猜行号删除更可靠。

确认新指纹可信后,只更新对应目标

ssh-keygen -R '[203.0.113.10]:2222'
ssh -p 2222 USER_NAME@203.0.113.10

第一条在本地移除该目标的旧主机记录;默认端口则使用 ssh-keygen -R 203.0.113.10。重新连接时,把提示的新指纹与可信通道得到的结果逐项比较,吻合后才接受。不要清空整个known_hosts,这会同时丢掉其他服务器已经建立的身份记录。

无法核实或仍出现警告

情况 下一步
没有计划变更,新指纹无法解释 停止连接,核对DNS、IP归属与实例,必要时通过已确认渠道联系管理员
域名连接和IP连接表现不同 分别记录实际解析结果、端口和密钥,不把不同目标的记录混为一谈
移除后仍命中旧记录 确认当前客户端使用的known_hosts路径和Host别名,保存完整警告的文件位置
组织使用主机证书或集中策略 按既有信任体系处理,不用个人删除记录替代管理员流程

验证通过后记下变更原因、时间、实例标识、算法和新指纹,便于下次核对。截图不需包含密码、私钥或完整个人路径;保留警告文字与非敏感目标信息即可。