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

如何在GitHub Actions中正确存储使用SSH的PEM文件?部署EC2遇权限报错

解决GitHub Actions部署EC2时的"Load key"和"Permission denied"错误

核心错误原因

  1. 私钥格式损坏:echo "$SSH_PRIVATE_KEY" 会自动将私钥中的换行符替换为空格,导致密钥格式无效,触发Load key "web-server.pem": error in libcrypto。
  2. 变量引用错误:工作流中env定义了EC2_USER: ubuntu,但SSH命令里误用${{ secrets.EC2_USER }},若Secrets未配置该值,会导致登录用户名错误。
  3. 权限配置问题:即便执行了chmod 600,若文件创建时权限继承异常,仍会触发SSH的严格权限检查。
  4. EC2公钥未配置:本地私钥对应的公钥未添加到EC2实例的~/.ssh/authorized_keys,直接导致Permission denied (publickey)。

正确配置方案

1. 修复私钥写入逻辑

用printf替代echo,确保私钥的换行符完整保留:

name: Deploy to EC2
env:
  SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
  EC2_HOST: ${{ secrets.EC2_HOST }}
  EC2_USER: ubuntu  
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to EC2
        run: |
          printf "%s" "$SSH_PRIVATE_KEY" > web-server.pem
          chmod 600 web-server.pem
          # 使用env中定义的EC2_USER变量,而非secrets
          ssh -i web-server.pem -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST "echo '连接成功'"

2. 验证私钥完整性

  • 确认GitHub Secrets中EC2_SSH_KEY包含完整的-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----,且每行末尾的换行符未丢失。
  • 本地执行ssh-keygen -y -f your-key.pem生成对应公钥,对比EC2实例~/.ssh/authorized_keys是否包含该公钥。

3. 检查EC2实例权限配置

登录EC2实例执行以下命令,确保权限符合SSH要求:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. 优化方案:使用SSH Agent避免文件写入

直接将私钥加载到SSH Agent,减少文件权限问题:

name: Deploy to EC2
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 初始化SSH Agent
        uses: webfactory/ssh-agent@v0.7.0
        with:
          ssh-private-key: ${{ secrets.EC2_SSH_KEY }}
      
      - name: 部署到EC2
        run: |
          ssh -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_HOST }} "echo '连接成功'"

排查调试技巧

  • 在工作流中添加调试步骤,查看私钥内容是否正确:
    run: |
      echo "检查私钥格式:"
      cat web-server.pem
    
  • 查看EC2实例的/var/log/auth.log日志,获取SSH登录失败的详细原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:48:31