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

GitHub Actions工作流中AWS CLI与EC2 SSH连接失败问题求助

解决GitHub Actions部署EC2时SSH主机密钥验证失败问题

问题原因

GitHub Actions的运行环境是临时容器,首次连接EC2实例时会触发主机密钥验证流程,由于容器内未预先存储目标EC2的主机密钥,默认会验证失败。你当前仅在ssh命令中添加了跳过验证的参数,但scp命令未添加,因此错误出现在文件复制环节。

修正方案

  1. 给scp命令也添加-o StrictHostKeyChecking=no参数,跳过主机密钥验证
  2. 将所有敏感信息(AWS凭证、PEM密钥、实例IP等)存储为GitHub Secrets,避免硬编码泄露

修正后的工作流代码

- name: Deploy to EC2
  run: |
    # 设置AWS CLI凭证(使用GitHub Secrets)
    aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws configure set default.region ${{ secrets.AWS_REGION }}

    # 确保PEM密钥权限正确(避免SSH报错权限过宽)
    chmod 600 ${{ secrets.EC2_PEM_KEY }}

    # SCP复制文件(添加跳过主机密钥验证参数)
    scp -o StrictHostKeyChecking=no -r -i ${{ secrets.EC2_PEM_KEY }} ./ ubuntu@${{ secrets.EC2_INSTANCE_IP }}:~/app
    
    # SSH执行部署命令(已添加跳过验证参数)
    ssh -o StrictHostKeyChecking=no -i ${{ secrets.EC2_PEM_KEY }} ubuntu@${{ secrets.EC2_INSTANCE_IP }} 'cd ~/app && composer install --no-dev --optimize-autoloader && php artisan migrate --seed'

额外注意事项

  • 在GitHub仓库的Settings -> Secrets and variables -> Actions页面,创建对应名称的Secrets,填入敏感值
  • PEM密钥必须设置为600权限,这是SSH对私钥的安全要求,否则会拒绝使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:57:05