GitLab Runner部署任务失败(退出码1)求助
GitLab Runner SSH部署Windows失败排查方案
原始配置
stages: - deployment-windows image: ubuntu:latest deployment-windows: stage: deployment-windows variables: GIT_BRANCH: demo PROJECT_NAME: $CI_PROJECT_NAME PROJECT_DIR: "${PROJECT_NAME}" rules: - if: '$CI_COMMIT_BRANCH == "demo"' before_script: - apt-get update -qq && apt-get install -y -qq sshpass script: - sshpass -p **** ssh emamian-pc@*.*.*.* "hostname && mkdir test"
报错信息
Processing triggers for libc-bin (2.35-0ubuntu3.1) ... $ sshpass -p **** ssh emamian-pc@**** "hostname && mkdir test" ERROR: Job failed: exit code 1
排查与解决步骤
开启SSH调试日志定位问题
修改script中的命令,添加-vvv参数获取详细连接日志,这是最直接的排查方式:sshpass -p **** ssh -vvv emamian-pc@*.*.*.* "hostname && mkdir test"日志会明确显示是网络连接失败、认证错误还是权限问题。
检查Windows主机SSH服务状态
- 确认Windows已安装并启动OpenSSH Server:在PowerShell中执行
Get-Service sshd,确保状态为Running;未安装的话通过「设置-应用-可选功能」添加OpenSSH服务器。 - 检查Windows防火墙是否允许22端口(SSH默认端口)的入站连接,可临时关闭防火墙测试是否是拦截导致的问题。
- 确认Windows已安装并启动OpenSSH Server:在PowerShell中执行
验证SSH密码登录有效性
- 确认
emamian-pc账户的密码正确,手动用SSH客户端(比如本地终端)尝试密码登录,验证是否能成功连接并执行命令。 - 检查Windows的SSH配置文件
C:\ProgramData\ssh\sshd_config,确保PasswordAuthentication yes已开启(默认可能关闭),修改后执行Restart-Service sshd重启服务。
- 确认
处理首次连接的主机密钥验证
容器首次连接Windows主机时,SSH会要求确认主机密钥,默认会阻断命令执行。可以临时添加参数跳过验证(生产环境建议预先导入主机密钥):sshpass -p **** ssh -o StrictHostKeyChecking=no emamian-pc@*.*.*.* "hostname && mkdir test"改用SSH密钥登录(更安全可靠)
密码登录容易出现泄露或配置问题,推荐用密钥认证:- 在GitLab Runner的Ubuntu容器中生成密钥对:
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa - 将生成的公钥
~/.ssh/id_rsa.pub内容,复制到Windows主机emamian-pc账户的C:\Users\emamian-pc\.ssh\authorized_keys文件中(没有该文件则新建)。 - 修改script命令为:
同时可以去掉before_script中的sshpass安装步骤。ssh -i ~/.ssh/id_rsa emamian-pc@*.*.*.* "hostname && mkdir test"
- 在GitLab Runner的Ubuntu容器中生成密钥对:
检查目标目录权限
mkdir test默认在用户家目录创建,确认emamian-pc账户对家目录有写入权限;如果要在其他路径创建,需指定完整路径并确保账户有对应权限。
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

