Algorithm negotiation fail 解决办法(jsch)

1.打印 jsch KEX algorithms 和host key algorithms

System.out.println("JSch.getConfig(\"kex\"):"+JSch.getConfig("kex"));  
        System.out.println("JSch.getConfig(\"server_host_key\"):"+JSch.getConfig("server_host_key"));

2.响应如下:

 JSch.getConfig("kex"):ecdh-sha2-nistp256
ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
JSch.getConfig("server_host_key"):
ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521

3.进入liunx 中,将上面打印出来的值,通过命令   sudo vi sshd_config

修改到KexAlgorithms 和HostKeyAlgorithms

### 解决JSch连接时算法协商失败的方法 当遇到`Algorithm negotiation fail`错误时,通常是因为SSH客户端和服务器之间的加密算法不兼容。对于Java应用程序使用JSch库的情况,可以通过更新JSch版本或引入额外的安全提供者来解决问题。 #### 更新JSch版本 旧版JSch可能缺少对某些现代安全协议的支持,因此升级到较新的版本可以解决此问题。例如,从0.1.51升级至0.1.55能够有效修复该类错误[^4]: ```xml <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency> ``` #### 添加Bouncy Castle作为安全提供者 如果仅通过升级JSch无法彻底解决问题,则可以在项目中加入Bouncy Castle库以扩展支持更多的加密算法。这有助于填补由于OpenSSH版本差异造成的算法缺失情况[^1]: ```xml <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.70</version> </dependency> ``` 此外,值得注意的是,在一些情况下,尤其是面对较低版本的操作系统自带SSHD服务(如CentOS/RHEL 6),其默认配置中的算法集较为陈旧,可能导致与最新版本软件间的互操作性问题。此时除了调整应用层面外,还应考虑是否有必要更新服务器端的相关设置或者操作系统本身[^2]。 为了确保最佳实践并提高安全性,建议始终采用最新的稳定发行版组件构建生产环境下的部署方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值