无法通过GitHub Action SSH连接AWS EC2 Ubuntu实例问题排查
GitHub Action SSH连接AWS EC2 Ubuntu实例失败排查
核心问题分析
报错Permission denied (publickey)说明SSH公钥认证失败,你的工作流存在两个关键问题:
- 未指定EC2登录用户和对应的SSH私钥:GitHub Action runner默认用
runner用户发起SSH请求,但EC2 Ubuntu实例的默认登录用户是ubuntu,且runner没有能被EC2信任的私钥。 - 配置的AWS凭证步骤对直接SSH连接EC2无效:
aws-actions/configure-aws-credentials是用于调用AWS API的,和SSH密钥认证无关,这步可以移除。
解决步骤
1. 生成并配置SSH密钥对
- 在本地终端生成密钥对:
ssh-keygen -t ed25519 -f github-action-ec2 - 把生成的公钥文件
github-action-ec2.pub的内容,添加到EC2实例的/home/ubuntu/.ssh/authorized_keys文件中。 - 确保文件权限正确:
chmod 700 /home/ubuntu/.ssh chmod 600 /home/ubuntu/.ssh/authorized_keys
2. 把私钥存入GitHub Secrets
将生成的私钥文件github-action-ec2的完整内容,复制到GitHub仓库的Settings > Secrets and variables > Actions中,命名为EC2_SSH_PRIVATE_KEY。
3. 修改GitHub Action工作流
调整deploy任务的步骤,添加SSH密钥配置,并指定正确的登录用户:
deploy: name: Deploy to UAT needs: integration-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: 配置SSH密钥 run: | echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > /tmp/ec2_key chmod 600 /tmp/ec2_key - name: 部署到EC2实例 run: ssh -i /tmp/ec2_key -o StrictHostKeyChecking=no ubuntu@${{ secrets.AWS_INSTANCE_IP }} "cd /var/www/html/api/uat && git pull && composer install --no-dev && php artisan migrate:seed && php artisan optimize"
额外排查点
- 检查EC2安全组规则:确保入站规则允许22端口(SSH)的流量,测试阶段可以临时允许
0.0.0.0/0,生产环境建议限制特定IP。 - 验证EC2的sshd配置:登录EC2后检查
/etc/ssh/sshd_config,确保PubkeyAuthentication yes,且未禁止ubuntu用户登录。 - 检查
authorized_keys格式:确保公钥内容完整,没有多余换行或空格。
内容的提问来源于stack exchange,提问作者Mena
相关产品推荐
相关产品推荐

