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密钥认证(彻底避免交互)
- 在构建服务器生成SSH密钥对:
ssh-keygen -t rsa -b 4096 -N "" -f C:\Users\administrator\.ssh\id_rsa - 将公钥文件
id_rsa.pub的内容复制到Web服务器的C:\Users\administrator\.ssh\authorized_keys文件中(若.ssh目录不存在则手动创建)。 - 修改CI脚本中的SCP命令,指定密钥文件路径:
deploy_job: stage: deploy script: - 'scp -i C:\Users\administrator\.ssh\id_rsa -r C:\example\ administrator@ipv4ofwebserver:C:\example\'
- 在构建服务器生成SSH密钥对:
调整命令参数临时跳过交互(仅测试用)
临时测试可添加参数跳过主机密钥确认(不推荐生产环境使用):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账户运行:- 打开GitLab Runner配置工具:
gitlab-runner.exe configure - 选择现有Runner,修改运行账户为
administrator并输入对应密码。
- 打开GitLab Runner配置工具:
内容的提问来源于stack exchange,提问作者Shayaan
相关产品推荐
相关产品推荐

