You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH自签名相关:每次连接均提示主机真实性无法建立疑问

为什么SSH每次连接都弹出主机真实性确认提示?

这问题我之前踩过好几次坑,太懂这种每次连服务器都要手动确认的烦躁了!先直接给你拆解原因,再解答关于自签名证书的疑问:

核心原因(按排查优先级排序)

  • 服务器SSH主机密钥每次重启都重新生成:很多云实例、容器或者临时环境会把主机密钥存在/tmp这类临时目录里,服务器重启后密钥就没了,每次启动都会自动生成新的密钥对。客户端本地~/.ssh/known_hosts里存的旧指纹和新密钥不匹配,自然每次连接都像遇到新主机一样弹提示。
  • 客户端known_hosts文件无法保存指纹:检查下你本地~/.ssh/known_hosts的权限——如果权限不是-rw-------(只有当前用户可读可写),或者父目录~/.ssh的权限不是drwx------,SSH客户端会因为权限安全问题无法写入指纹,导致每次连接都相当于首次连接。另外如果你每次用不同的用户连接服务器,每个用户的known_hosts是独立的,换用户也会重复弹提示。
  • 连接的主机IP/域名动态变化或被复用:如果你连接的是动态IP的服务器,每次IP不一样;或者这个IP/域名之前被其他SSH服务器占用过,客户端known_hosts里存的是旧服务器的指纹,现在新服务器的指纹不匹配,就会触发提示(这种情况有时会显示“主机密钥已更改”,但如果IP每次都变,就会每次识别成新主机)。
  • SSH客户端配置强制忽略指纹保存:比如你在~/.ssh/config里设置了UserKnownHostsFile /dev/null,或者连接时加了-o UserKnownHostsFile=/dev/null参数,这会让SSH客户端每次都不保存主机指纹,自然每次连接都要确认。

关于自签名证书的疑问

这个提示和是否使用自签名证书完全无关!SSH默认使用的就是自签名的主机密钥(不管是RSA、ECDSA还是ED25519类型),正常情况下首次连接弹提示是因为客户端没有该主机的指纹记录。而你遇到的“每次都弹”的问题,本质是客户端无法持久化保存或匹配到正确的主机指纹,和证书是否自签名没有关系——哪怕用CA签名的主机证书,如果客户端没信任CA,或者服务器密钥每次变化,还是会弹提示。

快速排查建议

  1. 检查本地known_hosts权限:
    ls -ld ~/.ssh
    ls -l ~/.ssh/known_hosts
    
    确保~/.ssh权限是drwx------,known_hosts是-rw-------。
  2. 登录服务器查看主机密钥:
    检查/etc/ssh/下的ssh_host_*_key文件,看看重启服务器后这些文件的修改时间是否会变化——如果每次重启都变,说明密钥是临时生成的。
  3. 手动导入主机指纹:
    如果是动态IP/域名的情况,可以提前用ssh-keyscan导入指纹:
    ssh-keyscan XXX >> ~/.ssh/known_hosts
    

内容的提问来源于stack exchange,提问作者Gal Kaptsenel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:27:51