如何解决最新版Jenkins SSH连接Redhat 7.9启动代理的Received Junk Text错误?
故障场景
使用最新版Jenkins通过SSH方式拉起Redhat 7.9节点的SSH Slave代理时,连接流程卡在命令执行前置检查阶段,报错Received Junk Text,Slave启动失败。
已完成的前置排查
- 目标服务器sshd服务的
LogLevel已调整为QUIET,按官方说明该级别会关闭所有debug输出 - 已逐一核查登录用户家目录下的
.bashrc、.profile文件,确认不存在登录时主动向标准输出写内容的配置 - 已尝试调整多项sshd_config配置屏蔽关联输出,故障现象无任何变化
- 从Windows命令行直接执行SSH命令可正常连通服务器,但复现了完全一致的垃圾文本输出
故障日志
SSHLauncher{host='192.168.86.38', port=22, credentialsId='b7cce8cd-3f30-48f4-97e7-ca0511ce35fd', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=60, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.ManuallyTrustedKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true} [04/05/21 11:01:03] [SSH] Opening SSH connection to 192.168.86.38:22. [04/05/21 11:01:03] [SSH] SSH host key matches key seen previously for this host. Connection will be allowed. [04/05/21 11:01:05] [SSH] Authentication successful. SSH connection reports a garbage before a command execution. Check your .bashrc, .profile, and so on to make sure it is quiet. The received junk text is as follows: debug3: mm_request_send entering: type 124 debug3: Copy environment: XDG_SESSION_ID=19 debug3: Copy environment: XDG_RUNTIME_DIR=/run/user/1000 Environment: USER=curt LOGNAME=curt HOME=/home/curt PATH=/usr/local/bin:/usr/bin MAIL=/var/mail/curt SHELL=/bin/bash SSH_CLIENT=192.168.86.5 51847 22 SSH_CONNECTION=192.168.86.5 51847 192.168.86.38 22 XDG_SESSION_ID=19 XDG_RUNTIME_DIR=/run/user/1000 null [04/05/21 11:01:06] Launch failed - cleaning up connection [04/05/21 11:01:06] [SSH] Connection closed.
根因定位
日志中捕获的所有垃圾文本,均来自sshd服务端进程自身的debug输出,并非用户shell初始化脚本产生。捕获到的debug3级别日志、环境变量逐行打印行为,直接说明sshd服务实际运行的日志级别为DEBUG3,并非配置的QUIET。
解决步骤
- 核查sshd实际加载的配置值
执行命令/usr/sbin/sshd -T -c /etc/ssh/sshd_config | grep loglevel,验证sshd实际生效的日志级别。常见问题包括:配置文件内存在多段重复LogLevel配置、sshd读取的配置文件路径与修改路径不一致、配置行存在语法错误,导致之前调整的LogLevel QUIET未实际生效。 - 完全重启sshd服务
部分场景下仅重载sshd配置,运行中的sshd主进程仍会保留之前启动时加载的debug级别参数,需执行systemctl restart sshd完全重启服务使新配置生效。 - 排查其他可能产生标准输出的配置
- 确认sshd_config中
PrintMotd no、PrintLastLog no、PrintBanner no配置已生效,避免系统登录提示、上次登录时间、自定义banner内容被输出到stdout - 核查
/etc/profile.d目录下的系统级启动脚本,是否存在非交互式shell场景下也会输出内容的逻辑。可直接执行ssh <目标服务器IP> "echo test"测试,如果返回结果除test字符外存在其他多余输出,即为对应脚本或配置产生的垃圾文本 - 检查
/etc/pam.d/sshd文件,确认pam模块在认证流程中不存在会向stdout写内容的规则
- 确认sshd_config中
注意事项
- Jenkins SSH Slave插件的判定逻辑为:SSH认证完成后,一旦检测到stdout流中存在任何待执行命令前的多余输出,就会直接判定为连接异常,不会继续执行后续Slave启动命令
- 排查时不要使用交互式SSH登录服务器做测试,因为交互式登录和非交互式命令执行的shell加载逻辑完全不同,直接通过
ssh <IP> <命令>的非交互方式测试,结果与Jenkins的连接行为完全一致
内容的提问来源于stack exchange,提问作者Curt Evans
相关产品推荐
相关产品推荐

