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

如何在GitHub Actions中通过SSH在远程服务器B执行Checkout(非git clone)

问题描述

假设有两台机器A和B,机器A是GitHub Actions自托管Runner。使用actions/checkout Action时,代码会拉取到机器A;现在想通过SSH连接到机器B,无需使用git clone或appleboy/ssh-action,如何在机器B上完成代码拉取(类似checkout的效果)?

示例工作流:

jobs:
  test:
    runs-on: self-hosted [Machine A]
    steps:
      - name: checkout
        uses: actions/checkout@v2 
        # 代码会拉取到机器A
      - name: ssh
        # 假设已经SSH连接到远程机器B
        # 如何在B上完成checkout操作,而不用git clone?是否可行?
可行方案

方案1:打包代码后通过SCP传输到机器B

既然已经在A上完成了checkout,直接把代码目录打包传到B再解压,就能得到和A一致的代码文件:

  1. 在机器A上打包当前代码目录:
    tar -czf code.tar.gz ./
    
  2. 用SCP把压缩包传到机器B的目标目录:
    scp code.tar.gz 你的B机器用户名@机器B地址:/你要存放代码的路径/
    
  3. SSH到机器B并解压清理:
    ssh 你的B机器用户名@机器B地址 "cd /你要存放代码的路径/ && tar -xzf code.tar.gz && rm code.tar.gz"
    

方案2:用rsync通过SSH同步代码目录

rsync可以高效同步本地(A)和远程(B)的目录,只传输差异文件,能保持B的代码和A完全一致:

rsync -avz --delete ./ 你的B机器用户名@机器B地址:/你要存放代码的路径/

--delete参数会删除B目录中A没有的文件,完全复刻A上的checkout结果。

方案3:通过SSH管道直接传输目录内容

不想生成本地压缩包的话,可以用tar结合SSH管道,直接把A的代码传到B并解压:

tar -czf - ./ | ssh 你的B机器用户名@机器B地址 "cd /你要存放代码的路径/ && tar -xzf -"
注意事项
  • 要确保机器A已经配置了免密SSH登录机器B,不然需要在工作流里用ssh-agent Action管理SSH密钥完成认证。
  • 如果机器B的目标目录还没创建,可以在SSH命令里加上创建指令,比如:
    ssh 你的B机器用户名@机器B地址 "mkdir -p /你要存放代码的路径/ && cd /你要存放代码的路径/ && tar -xzf -"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:12:10