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

通过GitHub Actions部署Docker到EC2时遇SSH认证失败求助

解决GitHub Actions SSH到EC2认证失败的问题

核心问题分析

你遇到的ssh: handshake failed错误,主要有两个关键原因:

  1. 不必要的嵌套SSH命令:你用appleboy/ssh-action已经成功建立了到EC2的SSH连接,但脚本里又重复执行ssh命令,相当于在EC2实例内部再尝试SSH登录自己,完全多余,还会因为EC2本地没有对应认证密钥导致失败。
  2. 可能的私钥配置或环境问题:私钥格式错误、EC2安全组未开放SSH端口、sshd配置禁用公钥认证等也会引发该问题。

分步解决方案

1. 修复Deploy步骤的脚本(最关键)

删除脚本里所有嵌套的ssh命令,appleboy/ssh-action会直接在EC2实例上执行你编写的脚本命令,无需手动重复SSH。修改后的步骤如下:

- name: Deploy to EC2
  uses: appleboy/ssh-action@master
  with:
    host: ${{ secrets.EC2_HOST }}
    username: ${{ secrets.EC2_USERNAME }}
    key: ${{ secrets.EC2_PRIVATE_KEY }}
    script: |
      # 登录ECR(需给EC2配置IAM角色或AWS凭证)
      aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}
      # 拉取ECR上的最新镜像
      docker pull ${{ steps.login-ecr.outputs.registry }}/cicd:latest
      
      # 停止并移除旧容器
      docker stop my-container || true
      docker rm my-container || true
      
      # 启动新容器
      docker run -d --name my-container -p 8383:8383 ${{ steps.login-ecr.outputs.registry }}/cicd:latest

提示:推荐给EC2附加具有ECR拉取权限的IAM角色,无需在实例上存储AWS凭证,更安全。

2. 检查GitHub Secrets里的私钥格式

确保EC2_PRIVATE_KEY是完整的.pem文件内容:

  • 必须包含开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----
  • 中间的每一行换行都要保留,粘贴时不要把整个私钥合并成一行(GitHub Secrets会自动保留换行)

3. 验证EC2的安全组配置

  • 入站规则必须允许**22端口(SSH)**的访问,测试阶段可暂时设置来源为0.0.0.0/0,正式环境建议限制为GitHub Actions的IP段
  • 出站规则允许所有流量,确保EC2能拉取ECR镜像和访问外网

4. 检查EC2的sshd配置

登录EC2实例,编辑/etc/ssh/sshd_config,确保以下配置未被注释:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

修改后重启sshd服务:

sudo systemctl restart sshd

同时检查EC2用户(如ubuntu或ec2-user)的~/.ssh/authorized_keys文件,里面必须包含你密钥对的公钥内容(创建EC2时选择的密钥对,公钥会自动写入该文件)。

额外提示

  • 建议将触发分支从master改为main,GitHub已将默认分支名统一为main
  • 尽量用IAM角色替代手动配置AWS凭证,提升安全性

内容的提问来源于stack exchange,提问作者Ganesh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:42:49