You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Jenkins升级后重建作业时SSH连接失败的根因排查咨询

Jenkins升级后重建作业时SSH连接失败的根因排查咨询

遇到这种Jenkins升级后SSH突然失效的问题确实挺头疼的,我结合你的描述和日常运维中碰到的类似坑点,整理几个可能的根因方向,你可以逐一排查:

1. Jenkins运行用户的权限/SSH配置文件权限问题

从日志里能看到Jenkins是以SYSTEM身份运行的,实际对应的系统用户通常是jenkins,而你手动测试用的是自己的个人用户,两者的权限环境完全不同:

  • 检查/var/lib/jenkins/.ssh/目录和ssh_config_preprod-ue1配置文件的权限,Jenkins用户必须拥有读权限。正常来说,.ssh目录权限应该是700,配置文件和私钥文件权限应该是600,如果权限过松或者归属用户不对,Jenkins读取配置时会被系统限制。
  • 你可以在Jenkins的shell构建步骤里先加一行命令验证:sudo -u jenkins ls -l /var/lib/jenkins/.ssh/,看看输出的权限是否符合要求。

2. SSH配置文件中的路径引用问题

仔细检查你的ssh_config_preprod-ue1配置内容:

  • 如果里面有IdentityFile这类引用私钥的配置,确认路径是绝对路径吗?如果是相对路径,手动运行时是相对于你的个人用户目录,但Jenkins运行时的工作目录是/var/lib/jenkins,路径就会不匹配。
  • 同时也要确认私钥文件本身的权限和归属,确保Jenkins用户能读取到。

3. Jenkins升级后的环境变量变化

新版本Jenkins可能调整了默认的环境变量设置:

  • 比如HOME环境变量,Jenkins运行时的HOME/var/lib/jenkins,而你手动测试时的HOME是自己的用户目录,如果SSH配置里有依赖HOME的相对路径,就会出现找不到文件的情况。
  • 可以在Jenkins的shell步骤里先输出环境变量信息:echo $HOME && echo $USER,确认当前运行环境是否符合预期。

4. SSH客户端版本或协议兼容性问题

Jenkins升级可能附带了SSH客户端版本的更新,新版本的SSH客户端可能禁用了一些旧的加密算法或协议,而你的目标服务器batch-host的SSH服务配置只允许这些旧的选项:

  • 建议在Jenkins的SSH命令里加上-v参数开启调试模式,比如:
    ssh -v -F /var/lib/jenkins/.ssh/config/ssh_config_preprod-ue1 batch-host 'echo test'
    
    调试日志会输出连接过程中的详细步骤,比如是否在密钥协商阶段失败,这能帮你快速定位兼容性问题。

5. Jenkins插件或全局配置的隐性变更

虽然你提到SSH插件没有报错,但升级过程中可能有一些隐性的配置变化:

  • 检查Jenkins全局配置中的SSH相关设置,比如是否有全局代理、SSH服务器配置被升级覆盖。
  • 如果你的作业使用了Credentials Binding插件来加载SSH密钥,确认升级后凭证的引用方式是否正常,有没有因为插件API变更导致无法正确加载密钥。

临时调试建议

你可以在Jenkins的shell构建步骤里先添加一段预检查命令,获取更多环境信息:

# 确认当前运行用户
whoami
# 检查SSH配置目录权限
ls -ld /var/lib/jenkins/.ssh/
ls -l /var/lib/jenkins/.ssh/
# 尝试读取配置文件(如果内容不敏感的话)
cat /var/lib/jenkins/.ssh/config/ssh_config_preprod-ue1
# 执行带调试日志的SSH连接测试
ssh -v -F /var/lib/jenkins/.ssh/config/ssh_config_preprod-ue1 batch-host 'echo SSH connection test'

这些输出会帮你缩小问题范围,更快找到根因。

备注:内容来源于stack exchange,提问作者Budianto IP

火山引擎 最新活动