Gerrit Trigger连接失败:JSchAlgoNegoFailException算法协商错误求助
解决Gerrit Trigger SSH连接算法协商失败问题
问题现象
连接Gerrit时触发以下错误:
Connection error : com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName="server_host_key" jschProposal="ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256" serverProposal="ssh-rsa"
环境信息
- Gerrit Trigger版本:2.39.0
- JSch依赖插件版本:0.2.8-65.v052c39de79b_2
- SSH密钥通过
ssh-keygen生成
解决方案
方案1:修改Gerrit服务器SSH配置(推荐)
Gerrit服务器当前仅启用了ssh-rsa作为主机密钥算法,而JSch客户端默认不将其列入协商列表,需在服务器端添加JSch支持的算法:
- 找到Gerrit服务器的
gerrit.config配置文件(通常路径为/var/gerrit/etc/gerrit.config) - 编辑
[sshd]段,添加支持的主机密钥算法:
[sshd] hostKeyAlgorithms = ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256
- 重启Gerrit服务使配置生效
方案2:修改JSch客户端算法列表
若无法调整服务器配置,可手动为JSch添加ssh-rsa算法支持:
- 进入Jenkins系统配置页面,找到Gerrit Trigger的连接配置项
- 查找是否有「自定义JSch属性」的设置区域,添加以下配置:
jsch.server_host_key=ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa
- 保存配置后重新测试连接
补充说明
新版本JSch默认禁用了ssh-rsa这类较旧的算法,如果Gerrit服务器最近升级或调整了SSH安全配置,仅保留ssh-rsa,就会触发该协商失败问题。优先推荐方案1,同时支持新旧算法,兼顾兼容性与安全性。
内容的提问来源于stack exchange,提问作者Solaris_9
相关产品推荐
相关产品推荐

