应使用ssh-keygen -F命令直接检查~/.ssh/known_hosts文件:按主机名查ssh-keygen -F example.com,按IPv4查ssh-keygen -F 192.168.1.100,按IPv6查ssh-keygen -F '[2001:db8::1]';有输出即已信任,无输出则未记录。

要验证特定主机的密钥是否已存在于本地 SSH 信任列表中,核心是检查 ~/.ssh/known_hosts 文件里有没有该主机的条目。这个文件记录了你曾成功连接过的远程主机的公钥指纹,用于防止中间人攻击。
查看 known_hosts 中是否存在目标主机
执行以下命令,用主机名或 IP 地址搜索:
-
按主机名查:
ssh-keygen -F example.com -
按 IPv4 地址查:
ssh-keygen -F 192.168.1.100 -
按 IPv6 地址查(带方括号):
ssh-keygen -F '[2001:db8::1]'
如果存在匹配项,会直接输出该主机在 known_hosts 中的完整行;若无输出,则说明尚未信任该主机。
理解输出结果的含义
例如运行 ssh-keygen -F github.com 后返回:
这表示该主机已记录,且使用了哈希化存储(现代 OpenSSH 默认启用)。即使看不到明文域名,只要命令有输出,就代表已信任。
注意:若主机曾用不同端口(如 ssh -p 2222 user@host)连接过,需带上端口搜索:ssh-keygen -F "[host]:2222"。
手动检查与清理选项
若想直观浏览或确认内容,可用:
-
cat ~/.ssh/known_hosts—— 查看全部条目(不推荐用于大文件) -
grep -i "target-host" ~/.ssh/known_hosts 2>/dev/null—— 快速文本匹配(对未哈希条目有效) -
ssh-keygen -R target-host—— 删除指定主机条目(用于重置信任)
删除后首次重连该主机,SSH 会再次提示“Are you sure you want to continue connecting?”,需要人工确认才能重新写入。
为什么不能靠连接行为来判断?
仅尝试 ssh user@host 并观察是否弹出确认提示,并不可靠。因为:
- 主机密钥可能已存在,但和当前实际密钥不一致(密钥变更或遭篡改),此时仍会报错并拒绝连接
- SSH 配置中若设置了
StrictHostKeyChecking no,会跳过验证,失去安全意义 - 网络中断、DNS 解析失败等也会导致连接失败,干扰判断
所以最准确的方式始终是用 ssh-keygen -F 直接查 known_hosts。

















