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
再去尝试连接即可成功。