如何在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
相关产品推荐
相关产品推荐

