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

再去尝试连接即可成功。

posted @ 2024-07-05 10:54  MyXjl  阅读(7)  评论(0编辑  收藏  举报