GitHub Actions工作流中AWS CLI与EC2 SSH连接失败问题求助
解决GitHub Actions部署EC2时SSH主机密钥验证失败问题
问题原因
GitHub Actions的运行环境是临时容器,首次连接EC2实例时会触发主机密钥验证流程,由于容器内未预先存储目标EC2的主机密钥,默认会验证失败。你当前仅在ssh命令中添加了跳过验证的参数,但scp命令未添加,因此错误出现在文件复制环节。
修正方案
- 给
scp命令也添加-o StrictHostKeyChecking=no参数,跳过主机密钥验证 - 将所有敏感信息(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
相关产品推荐
相关产品推荐

