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

无法通过GitHub Action SSH连接AWS EC2 Ubuntu实例问题排查

GitHub Action SSH连接AWS EC2 Ubuntu实例失败排查

核心问题分析

报错Permission denied (publickey)说明SSH公钥认证失败,你的工作流存在两个关键问题:

  1. 未指定EC2登录用户和对应的SSH私钥:GitHub Action runner默认用runner用户发起SSH请求,但EC2 Ubuntu实例的默认登录用户是ubuntu,且runner没有能被EC2信任的私钥。
  2. 配置的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:48:12