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

ElasticBeanstalk执行eb ssh报错:Host key verification failed

故障原因分析

老哥,这个坑我之前用Beanstalk自动伸缩时也踩过!核心问题其实出在本地SSH的known_hosts缓存:

  • 你手动终止旧EC2实例后,Beanstalk自动伸缩组创建的新实例大概率复用了原来的公网IP(Beanstalk环境的EC2通常从子网IP池分配,或重新关联弹性IP)。
  • SSH连接时会对比本地known_hosts里存储的对应IP的主机密钥,发现和新实例的密钥不匹配,就会触发中间人攻击的安全警告,直接拒绝连接。
  • 至于你试的eb ssh --setup,这个命令只是配置Beanstalk环境和SSH密钥的关联(比如把公钥传到EC2的authorized_keys),根本不会处理本地known_hosts里的旧缓存,所以不管怎么重置密钥、执行setup,问题都会持续。
解决方法(按推荐程度排序)

方法一:手动清理known_hosts旧条目(最安全)

从报错里能看到,有问题的密钥在/Users/wai/.ssh/known_hosts的第35行,直接删掉这一行就行:

  • 终端执行命令:
    sed -i '' '35d' /Users/wai/.ssh/known_hosts
    
    (Linux系统把sed -i ''改成sed -i即可)
  • 或者直接编辑文件:
    nano /Users/wai/.ssh/known_hosts
    
    找到对应IP的行删掉,按Ctrl+O保存、Ctrl+X退出。

之后再执行eb ssh,就会重新验证新实例的主机密钥并写入known_hosts,就能正常连接了。

方法二:临时跳过密钥检查(应急用)

如果不想手动编辑文件,可以在连接时临时关闭严格的主机密钥检查:

eb ssh --ssh-flag="-o StrictHostKeyChecking=no"

这个命令会让SSH跳过密钥验证,连接成功后新的主机密钥会自动写入known_hosts,下次连接就正常了。不过只适合应急用,别长期依赖,毕竟会降低安全性。

方法三:配置SSH自动忽略Beanstalk环境的密钥缓存(适合频繁换实例的开发环境)

如果你经常需要重启Beanstalk实例,可以修改SSH配置,让它针对Beanstalk环境自动跳过密钥检查:

  1. 编辑~/.ssh/config文件(没有就创建一个):
    nano ~/.ssh/config
    
  2. 添加以下内容(把<你的Beanstalk环境域名>换成实际环境域名,或写EC2子网IP段比如10.0.0.*):
    Host *.<你的Beanstalk环境域名> 10.0.0.*
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
    
  3. 保存退出后,以后连接这个环境的EC2实例就不会再出现密钥不匹配的报错了。注意:这个方法会关闭该范围内主机的密钥验证,只适合开发环境,生产环境别用!

内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:22:41