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

如何在GitHub Actions中配置需双SSH验证的Docker应用自动化部署工作流?

在GitHub Actions中通过双层SSH网关实现Docker应用自动化部署

1. 存储敏感信息到GitHub Secrets

先把所有敏感信息添加到你的GitHub仓库Secrets中:

  • GATEWAY_SSH_KEY:网关密钥文件gateway.pem的完整内容
  • GATEWAY_PASSPHRASE:网关密钥的密码短语
  • INSTANCE_SSH_KEY:实例密钥文件instance.pem的完整内容
  • INSTANCE_PASSPHRASE:实例密钥的密码短语
  • GATEWAY_IP:网关服务器的IP地址
  • INSTANCE_IP:目标Ubuntu实例的IP地址

2. 创建GitHub Actions工作流文件

在仓库根目录下创建.github/workflows/deploy.yml,内容如下:

name: 自动化部署Docker应用
on:
  push:
    branches: [ main ] # 可根据需求修改触发部署的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检出仓库代码
        uses: actions/checkout@v4

      - name: 启动SSH代理并加载密钥
        run: |
          # 启动ssh-agent服务
          eval $(ssh-agent -s)
          
          # 写入网关密钥并设置安全权限
          echo "${{ secrets.GATEWAY_SSH_KEY }}" > ~/.ssh/gateway.pem
          chmod 600 ~/.ssh/gateway.pem
          # 自动输入密码短语加载网关密钥
          echo "${{ secrets.GATEWAY_PASSPHRASE }}" | ssh-add -k ~/.ssh/gateway.pem
          
          # 写入实例密钥并设置安全权限
          echo "${{ secrets.INSTANCE_SSH_KEY }}" > ~/.ssh/instance.pem
          chmod 600 ~/.ssh/instance.pem
          # 自动输入密码短语加载实例密钥
          echo "${{ secrets.INSTANCE_PASSPHRASE }}" | ssh-add -k ~/.ssh/instance.pem

      - name: 配置SSH跳转规则
        run: |
          cat > ~/.ssh/config << EOF
          Host gateway
            HostName ${{ secrets.GATEWAY_IP }}
            User ubuntu
            IdentityFile ~/.ssh/gateway.pem
            ForwardAgent yes
          
          Host instance
            HostName ${{ secrets.INSTANCE_IP }}
            User ubuntu
            IdentityFile ~/.ssh/instance.pem
            ProxyCommand ssh -W %h:%p gateway
          EOF
          chmod 600 ~/.ssh/config

      - name: 执行部署命令
        run: |
          ssh -o StrictHostKeyChecking=no instance << 'EOF'
            # 切换到你的应用部署目录(请修改为实际路径)
            cd /path/to/your/app
            # 拉取最新代码
            git pull origin main
            # 重启Docker服务(按需调整命令)
            docker compose down
            docker compose up -d --build
          EOF

关键说明

  • SSH代理管理:用ssh-agent统一管理带密码短语的密钥,通过管道自动输入密码短语,避免交互阻塞工作流。
  • SSH配置简化:通过自定义~/.ssh/config,把双层跳转逻辑封装成ssh instance命令,降低后续操作复杂度。
  • StrictHostKeyChecking=no:跳过首次连接的主机密钥确认,防止工作流因交互提示卡住。
  • 命令隔离:部署命令用<< 'EOF'包裹,避免GitHub Actions解析实例侧的变量,确保命令在目标机器上正确执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:45:15