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

如何通过GitLab Runner跨Windows主机无密码执行Git拉取操作?

跨Windows主机实现GitLab CI自动Git Pull部署(无明文密码)

场景说明

作为CI/CD新手,现有环境:

  • Windows 11系统
  • 本地开发文件夹blog
  • 目标服务器文件夹blog1(仅允许通过git pull更新内容)
  • GitLab Runner已正常运行
  • 现有gitlab-ci.yml在Runner与目标文件夹同主机时可正常工作,现在需要将目标文件夹迁移到另一台Windows主机,同时要把手动SSH拉取流程集成到CI脚本中,且不能在配置文件里明文写密码。

解决步骤

1. 配置SSH免密登录(核心)

先在GitLab Runner所在主机生成SSH密钥对,实现免密码登录目标Windows主机:

  • 打开Runner主机的PowerShell,执行:
    ssh-keygen -t ed25519
    
    全程按回车(不要设置密钥密码,若必须设置密码,后续需额外配置SSH代理)。
  • 找到生成的公钥文件(默认路径:C:\Users\[Runner主机用户名]\.ssh\id_ed25519.pub),复制其全部内容。
  • 登录目标Windows主机,在C:\Users\[目标主机用户名]\.ssh\路径下新建authorized_keys文件(若没有.ssh文件夹就手动创建),将刚才复制的公钥内容粘贴进去。
  • 调整authorized_keys文件权限:右键文件→属性→安全→高级→禁用继承→删除所有现有权限条目→仅添加目标主机用户的完全控制权限(避免权限过宽导致SSH登录失败)。
  • 测试免密登录:在Runner主机执行ssh [目标用户名]@[目标主机IP],确认无需输入密码即可成功连接。

2. 修改gitlab-ci.yml的build阶段

将原来的本地拉取命令替换为远程SSH执行命令,直接在目标主机上运行git pull相关操作:

build-job:
  stage: build
  script:
    - echo "远程拉取代码到目标主机"
    - ssh [目标用户名]@[目标主机IP] "cd C:\xampp\htdocs\blog1 && git config --global --add safe.directory C:\xampp\htdocs\blog1 && git pull origin main"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
  environment: production

注意:将[目标用户名]和[目标主机IP]替换为实际信息。

3. 若使用带密码的SSH密钥(可选)

如果生成密钥时设置了密码,需要借助GitLab CI变量存储密钥,并在脚本中启动SSH代理加载:

  1. 在GitLab项目的设置→CI/CD→变量中添加变量SSH_PRIVATE_KEY,值为Runner主机的私钥文件(id_ed25519)内容,开启保护和掩码选项防止泄露。
  2. 修改build-job脚本:
build-job:
  stage: build
  before_script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
    - ssh-keyscan [目标主机IP] >> ~/.ssh/known_hosts
  script:
    - echo "远程拉取代码到目标主机"
    - ssh [目标用户名]@[目标主机IP] "cd C:\xampp\htdocs\blog1 && git config --global --add safe.directory C:\xampp\htdocs\blog1 && git pull origin main"

4. 额外注意点

  • 目标Windows主机需开启OpenSSH服务器:设置→应用→可选功能→添加功能→搜索并安装“OpenSSH服务器”,然后在服务列表中启动sshd服务并设置为自动启动。
  • 确保目标主机的Git已配置好拉取origin main的权限(比如已存储Git仓库的凭证,或通过SSH密钥连接Git仓库)。
  • 首次连接目标主机时,会弹出主机指纹确认,可在SSH命令后添加-o StrictHostKeyChecking=no跳过(仅限内部可信环境)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:42:05