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

GitLab CI流水线中SCP命令执行超时挂起问题求助

问题排查与解决方案

核心原因

GitLab Runner在Windows环境下以非交互模式运行时,SCP命令触发了交互请求(如首次连接的主机密钥确认、密码输入),但Runner无法处理交互输入,导致命令挂起超时;同时受Windows服务/进程的控制台句柄限制,出现无法终止进程的警告。

具体解决步骤

  • 预信任Web服务器主机密钥
    手动在构建服务器上执行一次SCP命令,确认主机密钥(输入yes),密钥会自动保存到当前用户的%USERPROFILE%\.ssh\known_hosts文件中。若GitLab Runner用系统账户运行,需将.ssh目录复制到系统账户的用户目录下(比如C:\Windows\System32\config\systemprofile\.ssh),确保Runner能访问该配置。

  • 改用SSH密钥认证(彻底避免交互)

    1. 在构建服务器生成SSH密钥对:
      ssh-keygen -t rsa -b 4096 -N "" -f C:\Users\administrator\.ssh\id_rsa
      
    2. 将公钥文件id_rsa.pub的内容复制到Web服务器的C:\Users\administrator\.ssh\authorized_keys文件中(若.ssh目录不存在则手动创建)。
    3. 修改CI脚本中的SCP命令,指定密钥文件路径:
      deploy_job:
        stage: deploy
        script:
          - 'scp -i C:\Users\administrator\.ssh\id_rsa -r C:\example\ administrator@ipv4ofwebserver:C:\example\'
      
  • 调整命令参数临时跳过交互(仅测试用)
    临时测试可添加参数跳过主机密钥确认(不推荐生产环境使用):

    deploy_job:
      stage: deploy
      script:
        - 'scp -o StrictHostKeyChecking=no -r C:\example\ administrator@ipv4ofwebserver:C:\example\'
    
  • 检查GitLab Runner运行账户权限
    若Runner以Windows服务运行,默认使用Local System账户,该账户无法访问普通用户目录下的.ssh配置。可将Runner改为用administrator账户运行:

    1. 打开GitLab Runner配置工具:
      gitlab-runner.exe configure
      
    2. 选择现有Runner,修改运行账户为administrator并输入对应密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:09