SSH error:Algorithm negotiation fail

背景

最近服务器升级了SSH,旧版本:OpenSSH_8.4p1, OpenSSL 3.0.8,升级后的新版本:OpenSSH_9.3p1, OpenSSL 3.0.9。升级后,发现Jenkins无法构建项目,原因是在SSH连接服务器时,报Algorithm negotiation fail。

问题排查

1、查看Jenkins具体报错信息,发现在maven构建完项目,调用插件:ant-jsch 上传war包到web应用服务器时,SSH连接报错:Algorithm negotiation fail。找到插件ant-jsch 使用的jsch客户端的版本:0.1.50。

2、SSH交互可以分为三个阶段:连接建立阶段、用户身份验证阶段、会话阶段。
根据报错基本可以确认,是SSH建立连接阶段出现问题,连接建立阶段报文如下:
SSH_MSG_KEXINIT:用于客户端和服务器之间的密钥交换初始化。
SSH_MSG_NEWKEYS:表示密钥交换完成。

3、通过命令 ssh -vvv ip 可以看到服务器支持的算法

可以看出远程端支持的
在这里插入图片描述
交换算法:diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
加密算法: rsa-sha2-512,rsa-sha

### 解决 `Algorithm negotiation fail` 异常的方法 当遇到 `Algorithm negotiation fail` 错误时,通常是因为客户端与服务器之间的某些算法不兼容所致。具体表现为 SSH 客户端和服务器无法就共同支持的密钥交换、主机验证或其他安全协议达成一致。 #### 修改服务器配置以适应旧版 JSch 库 对于 OpenSSH 版本 8.8p1 或更高版本,默认情况下禁用了部分较老的安全算法(如 `ssh-rsa`, `ssh-dss`)。如果使用的 JSch 库版本较低,则可能会因为缺少这些算法的支持而引发上述错误。此时可以通过编辑 `/etc/ssh/sshd_config` 文件来重新启用它们: ```bash KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1 HostKeyAlgorithms +ssh-rsa,ssh-dss PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss ``` 完成更改后记得重启 SSH 服务使设置生效[^4]。 #### 更新 JSch 库至最新稳定版本 考虑到长期维护性和安全性,建议尽可能使用最新的 JSch 库版本。虽然当前 Maven 中心仓库中的最高版本可能并非绝对最新,但仍应尝试将其依赖项声明更新为最新可用版本,并确保项目构建工具能够获取并应用此更新: ```xml <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version><!-- 检查是否有更近期发布的版本 --> </dependency> ``` 需要注意的是,即便如此也有可能由于其他因素继续遭遇相同问题;因此除了升级库本身外还需要关注整个环境内的组件间协调工作情况[^5]。 #### 验证双方所支持的具体算法列表 为了更好地理解为何会发生协商失败的情况以及如何针对性地解决问题,可以利用命令行工具查看本地机器同目标主机之间实际可选的加密方案集合。例如,在 Linux 上可通过以下方式查询: ```bash ssh -Q cipher-auth,kex,mac,pubkey ``` 对比两端输出的结果找出差异之处进而采取相应措施调整直至二者具备交集为止[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值