Github Actions部署SpringBoot到AWS EC2构建失败求助
问题
尝试用Github Actions + Docker自动部署SpringBoot项目到AWS EC2,已经在Github Secrets里配置了相关密钥,跟着教程写了YAML工作流,但执行时碰到SSH私钥加载错误和权限拒绝问题,附上配置和日志求解决。
工作流配置(.github/workflows/deploy.yml)
# 实际配置内容 name: EC2 Deployment on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build Docker Image run: mvn spring-boot:build-image -Dspring-boot.build-image.imageName=my-app:latest - name: Deploy to EC2 via SSH uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_PUBLIC_IP }} username: ubuntu key: ${{ secrets.EC2_SSH_KEY }} script: | docker stop my-app || true docker rm my-app || true docker run -d -p 8080:8080 --name my-app my-app:latest
错误日志
Run appleboy/ssh-action@v1.0.3 Error: Failed to load SSH private key: invalid format Error: Process completed with exit code 1
解决思路
- 核对SSH私钥格式:检查Github Secrets里的
EC2_SSH_KEY是不是完整的PEM格式,必须包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----两行,粘贴的时候别漏了换行或多加空格。 - 修正EC2上的权限:登录EC2实例,把
.ssh目录权限改成700,authorized_keys文件权限改成600,执行:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 本地验证私钥可用性:用本地的私钥文件尝试SSH连接EC2,确认能正常登录:
ssh -i your-private-key.pem ubuntu@ec2-public-ip - 处理Secrets里的换行问题:如果私钥粘贴到Secrets时自动去掉了换行,把私钥转成Base64编码后再存入Secrets,然后在工作流里解码使用:
- name: Decode SSH Key run: | echo "${{ secrets.EC2_SSH_KEY_BASE64 }}" | base64 -d > /tmp/ec2-key.pem chmod 600 /tmp/ec2-key.pem - name: Deploy to EC2 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_PUBLIC_IP }} username: ubuntu key_path: /tmp/ec2-key.pem script: | # 部署脚本 - 检查工作流密钥引用:确保YAML里的密钥名称和Github Secrets里的完全一致,别打错字。
内容的提问来源于stack exchange,提问作者Ankit Vashishta
相关产品推荐
相关产品推荐

