Jenkins配置Gerrit trigger连接失败的问题
Jenkins配置Gerrit trigger连接失败的问题
问题现象
在使用 Jenkins 和 Gerrit 进行自动化构建和代码审核时,遇到了 Gerrit Trigger 使用 JSCH 库进行 SSH 连接的问题。具体来说,问题与 RSA 密钥签名兼容性有关,导致无法成功建立 SSH 连接:
已经确认过密钥对没有问题,在Jenkins所在的机器上通过ssh指定密钥可以连接上Gerrit服务器,但是Jekins无论如何都无法连接成功。
环境信息
Jenkins 版本: 2.466
Gerrit 版本: 2.14.19
OpenSSH 版本: 8.2p1
问题原因
Jenkins尝试连接Gerrit服务器时,是通过Java的jsch库进行ssh连接的,这种连接方式跟ssh直接连接还是有所区别。它所使用的验证算法与Gerrit不兼容,导致一直验证失败。Gerrit的版本较为老旧,它只认可ssh-rsa类型的密钥。
解决方法
配置 Jenkins 的 JVM 启动参数,指定 JSCH 使用 ssh-rsa
作为客户端公钥和服务器主机密钥的算法。
在Jenkins的服务文件(/lib/systemd/system/jenkins.service)中设置一下环境变量,分别配置 JSch(Java Secure Channel,一个用于 SSH2 的 Java 库)使用 ssh-rsa
作为客户端公钥算法;配置 JSch 使用 ssh-rsa
作为服务器主机密钥算法:
Environment="JAVA_OPTS=-Djsch.client_pubkey=ssh-rsa -Djsch.server_host_key=ssh-rsa"
重载systemd配置并重启Jenkins服务:
sudo systemctl daemon-reload
sudo systemctl restart jenkins
再去尝试连接即可成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了