使用GitHub Actions部署JS应用至AWS EC2时遇权限错误如何解决?
解决GitHub Actions部署EC2时的私钥加载与权限拒绝问题
检查私钥格式完整性
确保GitHub Secrets中存储的PRIVATE_KEY是完整的OpenSSH私钥格式,必须包含开头的-----BEGIN OPENSSH PRIVATE KEY-----和结尾的-----END OPENSSH PRIVATE KEY-----,且没有多余的换行、空格或截断。复制私钥时要完整复制整个文件内容。修正私钥写入命令
原命令echo "$PRIVATE_KEY" > private_key可能因换行符处理错误导致私钥损坏,改用更可靠的写入方式:printf "%s" "$PRIVATE_KEY" > private_key && chmod 600 private_key或者直接使用GitHub官方推荐的
ssh-agent动作管理私钥,避免手动处理文件:- name: 配置SSH代理 uses: webfactory/ssh-agent@v0.7.0 with: ssh-private-key: ${{ secrets.PRIVATE_KEY }}使用该动作后,后续SSH连接无需指定私钥文件,代理会自动处理。
验证EC2端公钥与权限配置
登录EC2实例,检查目标用户(如ec2-user或自定义用户)的~/.ssh/authorized_keys文件:- 确保文件中包含对应私钥的公钥完整内容
- 设置正确的权限:
chmod 600 ~/.ssh/authorized_keys,同时~/.ssh目录权限需为700,否则SSH会拒绝使用该密钥。
排查网络与安全组限制
- 确认EC2实例的安全组规则允许来自GitHub Actions服务器的SSH(22端口)连接,可临时开放0.0.0.0/0进行测试,排除网络拦截问题
- 验证EC2实例的公网IP/域名正确,且服务器处于运行状态
本地测试私钥有效性
在本地环境使用该私钥尝试连接EC2:ssh -i /path/to/your/private_key ec2-user@<EC2_PUBLIC_IP>如果本地连接也失败,说明私钥本身无效,需要重新生成SSH密钥对,并将新的公钥添加到EC2的
authorized_keys中。
内容的提问来源于stack exchange,提问作者Hamza Rehman
相关产品推荐
相关产品推荐

