GitLab Runner SSH执行器准备环境失败(Process exited with status 1)问题求助
GitLab Runner SSH执行器准备环境失败(Process exited with status 1)问题求助
根据你描述的情况,这个问题大概率和SSH目标主机的shell profile文件加载异常有关——虽然错误提示指向.bash_logout,但实际问题往往出在其他登录/交互shell的配置文件上。结合你提到的同配置其他runner正常的情况,我给你几个针对性的排查和解决方向:
1. 手动模拟Runner的SSH执行流程,定位具体错误
首先在你的GitLab Runner主机上,切换到gitlab-runner用户,手动执行和Runner一致的SSH命令,看看能不能复现错误:
su - gitlab-runner ssh -i /data/gitlab/.ssh/id_ed25519 -p 22 gitlab@server.dns.name 'echo "Test successful"'
如果这个命令执行失败或有异常输出(比如报错、非预期提示),那就是目标主机的SSH登录或shell配置有问题。如果执行正常,再尝试模拟Runner的环境加载流程:
ssh -i /data/gitlab/.ssh/id_ed25519 -p 22 gitlab@server.dns.name 'source ~/.profile && source ~/.bashrc && echo "Profile loaded"'
这一步能帮你定位是不是profile文件里的错误命令导致了退出。
2. 检查目标主机gitlab用户的shell配置文件
重点检查目标主机(server.dns.name)上gitlab用户的以下文件:
~/.bashrc~/.profile~/.bash_profile/etc/profile(系统级配置)
需要排查这些文件里是否存在:
- 带有
set -e的命令(会导致任意命令失败就直接退出) - 尝试切换到不存在的目录(比如
cd /some/nonexist/path) - 执行不存在的脚本或命令(比如
source /opt/xxx/script.sh但文件不存在) - 输出重定向到
/dev/null但实际命令执行失败的情况(虽然看不到错误,但命令返回非0状态会导致环境准备失败)
3. 验证SSH相关权限配置
虽然你说其他runner正常,但还是要确认当前环境的密钥权限是否符合要求:
- Runner主机上的
/data/gitlab/.ssh/id_ed25519权限必须是600,所属用户是gitlab-runner:chmod 600 /data/gitlab/.ssh/id_ed25519 chown gitlab-runner:gitlab-runner /data/gitlab/.ssh/id_ed25519 - 目标主机上
gitlab用户的~/.ssh目录权限是700,authorized_keys文件权限是600:chmod 700 ~gitlab/.ssh chmod 600 ~gitlab/.ssh/authorized_keys
4. 开启Runner的Debug日志,获取更详细信息
修改你的config.toml文件,添加日志级别配置:
concurrent = 1 check_interval = 0 shutdown_timeout = 0 log_level = "debug" # 新增这一行 [session_server] session_timeout = 1800 [[runners]] # 你的runner原有配置...
然后重启GitLab Runner服务:
gitlab-runner restart
再次触发失败的Job,查看Runner日志(通常在/var/log/gitlab-runner.log),里面会有更具体的错误细节,比如到底是哪一步的命令返回了非0状态。
5. 检查目标主机的SSH服务配置
查看目标主机的/etc/ssh/sshd_config,确认是否存在限制gitlab用户的配置,比如:
ForceCommand:强制执行某个命令,可能干扰Runner的环境准备AllowUsers/DenyUsers:是否限制了gitlab用户的SSH登录PermitUserEnvironment:是否禁用了用户环境变量加载
如果有这些配置,尝试临时注释掉并重启sshd服务,再测试Job是否正常。
备注:内容来源于stack exchange,提问作者sflyer
相关产品推荐
相关产品推荐

