当我们在linux系统中使用ssh命令连接远程服务器时,终端突然出现IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY的提示,说明当前ssh连接过程中出现了密钥验证异常的情况,这是ssh的安全机制在发挥作用。

提示出现的原因
ssh协议在首次连接远程服务器时,会将对方的主机公钥保存到本地的~/.ssh/known_hosts文件中,后续连接时会校验远程服务器的公钥是否和本地保存的一致。出现上述提示通常有两种情况:
- 远程服务器的系统重装、ssh服务重装,导致主机公钥发生了变化,和本地保存的旧公钥不匹配。
- 本地
known_hosts文件中对应远程服务器的记录被篡改,或者存在错误的公钥信息。 - 极少数情况下可能是中间人攻击,有第三方伪装成目标服务器和你建立连接。
具体解决步骤
步骤1:确认远程服务器身份
首先联系远程服务器的管理员,确认服务器是否近期做过系统重装、ssh服务重装等操作,排除真实的中间人攻击风险。如果确认是服务器正常变更导致的公钥变化,再进行后续操作。
步骤2:删除本地旧的公钥记录
我们可以直接编辑本地的known_hosts文件,删除对应远程服务器的记录,也可以直接使用ssh-keygen命令删除指定主机的记录,命令格式如下:
# 替换remote_ip为你要连接的远程服务器IP或域名 ssh-keygen -R remote_ip
执行命令后,终端会提示已经删除了对应主机的记录,示例如下:
# 执行ssh-keygen -R 192.168.0.100的输出示例 # Host 192.168.0.100 found: line 1 /root/.ssh/known_hosts updated. Original contents retained as /root/.ssh/known_hosts.old
步骤3:重新建立ssh连接
删除旧记录后,再次执行ssh连接命令,此时会提示是否信任新的主机公钥,输入yes确认即可,新的公钥会自动保存到known_hosts文件中,后续连接就不会再出现该提示了。
ssh root@192.168.0.100 # 输出提示 The authenticity of host '192.168.0.100 (192.168.0.100)' can't be established. ECDSA key fingerprint is SHA256:xxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.100' (ECDSA) to the list of known hosts. root@192.168.0.100's password:
相关安全建议
为了避免后续再次出现同类问题,同时提升ssh连接的安全性,可以参考以下建议:
- 如果是生产环境的服务器,尽量使用密钥认证代替密码认证,减少密码泄露和暴力破解的风险。
- 定期备份本地的
~/.ssh/known_hosts文件,避免误删其他正常服务器的记录。 - 如果频繁出现该提示且确认不是服务器正常变更导致,建议检查本地网络和远程服务器的安全状态,排查是否存在中间人攻击的可能。
常见问题补充
如果删除记录后重新连接还是出现该提示,可以检查本地known_hosts文件是否还有对应远程服务器的残留记录,或者尝试清空整个known_hosts文件后重新连接,不过清空文件会导致所有之前保存的服务器公钥都被删除,下次连接所有服务器都需要重新确认。
另外如果使用的是非默认22端口的ssh服务,删除记录时需要加上端口参数,命令格式为ssh-keygen -R [remote_ip]:port,例如远程服务器ssh端口是2222,命令就是ssh-keygen -R [192.168.0.100]:2222。
sshlinuxknown_hosts远程连接密钥验证修改时间:2026-07-21 14:57:21