SSH Host key verification failed:原来是我没输入 yes(真实踩坑复盘)
2026年1月 · 预计阅读时间: 2 分钟
TL;DR
当 SSH 提示:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
这里没有默认选项。
- 你必须输入
yes并回车,才会把服务器指纹写入~/.ssh/known_hosts - 直接回车 = 拒绝 = 立刻断开,然后你就会看到
Host key verification failed.
问题现象:SSH 一直 Host key verification failed
今天我想在另外一台电脑上,把打包好的 Docusaurus 静态网站上传到服务器上。
然后就需要重新配置一下 SSH 链接。
我之前是把服务器的 key 保存到了 iCloud 上,这次就在这台电脑上下载下来用。
在连接的时候,一直报错:
Host key verification failed.
FAIL
具体实际显示如图:

看起来很像是 key 的验证问题。
我先确认了一下:
- IP 地址一样
- 登录用的 key(pem / 私钥)是同一个
- 服务器有多个 SSH Host Key(ED25519 / RSA / ECDSA)
- 其中有一个指纹和客户端提示的完全一致
- 新电脑本地没有旧的
known_hosts记录(第一次连接)
按理说,这种情况只要第一次连接的时候确认指纹就可以了。
后来,我发现了,当 SSH 提示这个的时候:
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
我直接按了回车,然后紧接着就是提示:
Host key verification failed.
当时我以为 默认就是 yes,可能前端开发做多了,好多脚手架命令提示默认就是 yes 或者 y,所以这次我也没有手动输入。
真正原因:我没有输入 yes
SSH 在这里没有“默认 yes”的机制。如果直接回车,SSH 会把它当作拒绝,从而终止连接并报错。
SSH 的交互逻辑(为什么回车会失败)
当看到:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
实际行为是:
- 输入
yes+ 回车:接受服务器指纹,并写入~/.ssh/known_hosts - 输入
no:拒绝 - 什么都不输入直接回车:当作拒绝
Ctrl+C:终止- 输入指纹(
[fingerprint]):接受
也就是说:没有输入 = 拒绝。
正确做法(如何通过验证)
看到提示后,确认指纹无误,然后明确输入:
yes
成功后通常会出现类似信息(不同系统略有差异):
Permanently added 'x.x.x.x' (ED25519) to the list of known hosts.
接下来才会进入真正的登录验证阶段(验证 pem / 用户名)。
不要只靠“看起来对”。更安全的方式是从你可信渠道拿到服务器指纹(例如运维记录/控制台/同事确认),再对照提示里的 fingerprint。
如果你想本地查看已记录的指纹:
# 列出 known_hosts 里记录的主机(以及对应 key)
ssh-keygen -F x.x.x.x
# 查看某条记录的指纹(把下面路径替换为 ssh-keygen -F 输出的那行)
ssh-keygen -lf ~/.ssh/known_hosts
顺带澄清几个常见误区
这和 pem/私钥有关系吗?
没有。这个阶段验证的是“服务器是谁”(Host Key),还没轮到验证“你是谁”(你的登录 key)。
服务器需要做什么吗?
不需要。known_hosts 是客户端文件,服务器不参与。
为什么另一台电脑能连?
因为那台电脑早就信任过这台服务器的指纹,SSH 不会再询问,自然也不会触发这次交互。
一句话总结
SSH 的 yes/no 提示没有默认选项。你不输入 yes,就等于拒绝。
如果你遇到:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Host key verification failed.
先别急着查 pem、别重装系统,先确认:你有没有真的输入 yes。