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

能否通过YAML配置借助Jumphost实现GitHub Action SSH登录VM?

可以借助YAML配置实现GitHub Action通过Jumphost SSH登录生产服务器

当然可以实现,下面是具体的配置方案和执行细节:

前置准备

先在GitHub仓库的Settings > Secrets and variables > Actions中添加以下敏感信息(避免硬编码在YAML里):

  • JUMPHOST_SSH_KEY:登录Jumphost的私钥
  • PROD_SERVER_SSH_KEY:登录生产服务器的私钥
  • JUMPHOST_USER:Jumphost的登录用户名
  • JUMPHOST_IP:Jumphost的公网IP地址
  • PROD_SERVER_USER:生产服务器的登录用户名
  • PROD_SERVER_IP:生产服务器的内网/目标IP

完整YAML配置示例

name: SSH to Prod via Jumphost
on: [push, workflow_dispatch]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Configure SSH environment
        run: |
          # 创建SSH目录并设置权限
          mkdir -p ~/.ssh
          chmod 700 ~/.ssh

          # 写入Jumphost和生产服务器的私钥
          echo "${{ secrets.JUMPHOST_SSH_KEY }}" > ~/.ssh/jump_key
          echo "${{ secrets.PROD_SERVER_SSH_KEY }}" > ~/.ssh/prod_key
          chmod 600 ~/.ssh/jump_key ~/.ssh/prod_key

          # 配置SSH config,简化跳转命令
          cat > ~/.ssh/config << EOF
          Host jump-host
            User ${{ secrets.JUMPHOST_USER }}
            HostName ${{ secrets.JUMPHOST_IP }}
            IdentityFile ~/.ssh/jump_key
            StrictHostKeyChecking no

          Host prod-server
            User ${{ secrets.PROD_SERVER_USER }}
            HostName ${{ secrets.PROD_SERVER_IP }}
            IdentityFile ~/.ssh/prod_key
            ProxyCommand ssh -W %h:%p jump-host
            StrictHostKeyChecking no
          EOF
          chmod 600 ~/.ssh/config

      - name: Run command on production server
        run: ssh prod-server "echo '✅ Successfully logged into production server' && uptime && free -h"

配置说明

  • SSH Config文件:通过定义jump-host和prod-server两个主机条目,其中ProxyCommand ssh -W %h:%p jump-host指定了通过Jumphost转发SSH请求到生产服务器,后续直接用ssh prod-server就能完成跳转。
  • 权限设置:SSH对文件权限要求严格,私钥和配置文件必须设为600,目录设为700,否则会拒绝访问。
  • StrictHostKeyChecking:关闭主机密钥验证是为了适配CI/CD场景(如果需要更高安全性,可以预先将Jumphost和生产服务器的公钥添加到known_hosts中)。

简化版(无需SSH Config)

如果不想配置SSH文件,也可以直接在命令中指定代理参数:

name: Direct SSH via Jumphost
on: [workflow_dispatch]

jobs:
  ssh-test:
    runs-on: ubuntu-latest
    steps:
      - name: Direct SSH to prod
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.JUMPHOST_SSH_KEY }}" > ~/.ssh/jump_key
          echo "${{ secrets.PROD_SERVER_SSH_KEY }}" > ~/.ssh/prod_key
          chmod 600 ~/.ssh/jump_key ~/.ssh/prod_key

          # 直接通过ProxyCommand跳转
          ssh -i ~/.ssh/prod_key \
              -o ProxyCommand="ssh -i ~/.ssh/jump_key -W %h:%p ${{ secrets.JUMPHOST_USER }}@${{ secrets.JUMPHOST_IP }}" \
              ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_IP }} \
              "echo '✅ Connected to production server' && df -h"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:00:51