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

如何安全获取、验证并保存SSH known_hosts中的主机公钥以避免首次连接交互

如何安全获取、验证并保存SSH known_hosts中的主机公钥以避免首次连接交互

这个场景太常见了——刚部署完新实例,首次SSH连接就弹出主机真实性验证的提示,既要自动化跳过这个交互,又不能傻乎乎地直接关掉验证(那可是给中间人攻击开门啊)。下面是几个安全靠谱的操作步骤:

第一步:从可信渠道获取主机公钥/指纹

首先得拿到目标主机的真实公钥或指纹,这是安全的核心,必须从绝对可信的来源获取:

  • 如果能直接访问目标主机的本地控制台(比如云服务商的Web管理终端、物理机的本地shell),直接在主机上执行命令导出公钥或指纹:
    • 查看RSA公钥指纹:ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
    • 查看ED25519公钥指纹(现在很多新系统用这个更安全):ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
      也可以直接查看完整公钥内容:cat /etc/ssh/ssh_host_rsa_key.pub(对应RSA),把内容记下来。
  • 如果是云服务商提供的实例,大部分厂商会在实例详情页面直接展示SSH主机的公钥指纹(比如AWS EC2、阿里云ECS等),直接从官方控制台拿就好,这是最安全的方式。

第二步:验证公钥/指纹的真实性

拿到公钥/指纹后,一定要做验证:

  • 如果是手动第一次连接,当SSH弹出提示时,把提示里的指纹和你提前拿到的对比,完全一致再输入yes,这次之后主机信息就会自动保存到~/.ssh/known_hosts里,下次就不会再提示了。
  • 如果要自动化处理,先通过ssh-keyscan命令获取目标主机的公钥:
    ssh-keyscan <你的主机名> <主机IP地址>
    
    执行后会输出类似这样的内容:

    <主机名> ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...(后面是完整公钥)
    把这段输出里的公钥部分,和你从可信渠道拿到的主机公钥对比,确认完全一致,确保没有被篡改。

第三步:安全写入known_hosts文件

验证通过后,就可以把公钥写入本地的known_hosts文件,避免后续交互:

  • 直接追加到用户目录下的known_hosts:
    ssh-keyscan <你的主机名> <主机IP地址> >> ~/.ssh/known_hosts
    
  • 如果是系统级的配置(所有用户都生效),可以写入/etc/ssh/ssh_known_hosts:
    ssh-keyscan <你的主机名> <主机IP地址> >> /etc/ssh/ssh_known_hosts
    

重要提醒!绝对不要做的事

千万别图省事就直接在SSH配置里加StrictHostKeyChecking no或者UserKnownHostsFile /dev/null——这种操作会完全跳过主机真实性验证,任何中间人都能伪装成你的目标主机,风险极高,绝对不可取。

备注:内容来源于stack exchange,提问作者Eugen Konkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:43:13