首次连接SSH服务器时须人工比对终端提示的主机密钥指纹与服务器本地真实指纹(如SHA256:xxx),算法类型必须一致;不匹配则可能遭遇中间人攻击,应立即中断连接。

当你在Linux终端执行ssh user@host首次连接一台服务器时,系统会弹出警告提示“无法建立主机真实性”,此时必须人工核对屏幕上显示的SSH主机密钥指纹是否与服务器真实指纹一致,否则可能正在遭受中间人攻击——攻击者正冒充目标服务器接收你的登录凭据。
获取服务器本地真实指纹
登录目标服务器物理控制台、云平台Web终端或已有可信SSH连接,执行以下命令:
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
若服务器使用RSA密钥,则改用:ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub。注意:不同密钥类型生成的指纹不可互换比对,【必须确认客户端连接时提示的算法类型(如ED25519)与你查询的公钥文件一致】。输出中SHA256开头的那串字符就是真实指纹,例如SHA256:kkSd8JjWgW5EewrBcUP1QBw/ZVC430FjFqfuRAYxetU。
比对首次连接时的提示指纹
在本地终端发起ssh连接,当看到类似以下提示时暂停输入:
The authenticity of host 'example.com (192.0.2.1)' can't be established.
ED25519 key fingerprint is SHA256:kkSd8JjWgW5EewrBcUP1QBw/ZVC430FjFqfuRAYxetU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
逐字符比对冒号后全部内容,包括大小写、字母数字和冒号位置。任何一处不匹配都说明身份存疑——可能是服务器重装、IP被复用,也可能是网络劫持。此时不要输入yes,应立即中断连接。
自动化校验方法
方法一:启用DNS SSHFP记录验证
在本地~/.ssh/config中添加两行:
Host example.com
VerifyHostKeyDNS yes
下次连接时,OpenSSH会自动查询_domain._sshfp.example.com的DNS记录,并与服务端发送的指纹比对。该方式依赖DNSSEC部署,仅适用于已配置SSHFP DNS记录的环境。
方法二:用ssh-keyscan预取并比对
在可信网络下运行:ssh-keyscan -t ed25519 example.com | ssh-keygen -lf -
它会直接输出远程主机当前ED25519公钥的指纹,无需交互式登录。把结果与首次连接提示的指纹对照即可。注意:ssh-keyscan本身不校验服务器身份,【务必在首次连接前、且网络可信的前提下执行】,否则可能抓到中间人伪造的响应。
指纹突变后的应急处理
第一步:确认变更合理性
联系服务器管理员,核实是否近期重装系统、更换密钥或迁移IP。若得到明确授权,可手动更新本地记录。
第二步:安全清理旧记录
执行ssh-keygen -R example.com,该命令会从~/.ssh/known_hosts中精准删除对应主机条目,不会误删其他主机记录。
第三步:重新连接并核对
再次ssh example.com,此时将触发全新指纹确认流程,按前述步骤严格比对后输入yes写入。这一步操作起来很简单,但跳过核对等于主动放弃防御。











