com.jcraft.jsch.JSchException: Algorithm negotiation fail 异常解决

异常错误信息

com.jcraft.jsch.JSchException: Algorithm negotiation fail
	at com.jcraft.jsch.Session.receive_kexinit(Session.java:595)
	at com.jcraft.jsch.Session.connect(Session.java:325)
	...

出现这个问题主要是客户端与服务器的算法不一致导致的,只要将其中一边添加上对方的算法即可。

查看支持的算法

代码增加jsch的日志输出,根据日志框架添加对应的日志对象,然后登录ssh服务,就会打印下面的日志

JSch.setLogger(new Slf4jLogger());
JSch.setLogger(new Log4j2Logger());

从日志中找到下面内容就可以看支持的算法,一般出现kex: server的第一第二行就是服务器支持的算法。
第一行对应是kex的算法,第二行对应的是server_host_key的算法。

...
kex: server: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1.
kex: server: ssh-rsa,ssh-dss.
...
kex: client: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,ext-info-c.
kex: client: rsa-sha2-512,rsa-sha2-256.
...
使用命令查看服务器支持的算法
ssh -vvv 目标ip

从输出结果找到下面内容就可以看到服务器所支持的算法。
KEX algorithms对应的是kex的算法,host key algorithms对应server_host_key的算法。

...
debug2: KEX algorithms: gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: host key algorithms: ssh-rsa,ssh-dss
...

解决方法

jsch 版本需要升级到0.1.53以上

# 扩展更多的算法,jdk自带的算法可能不够,有些算法不支持
Security.insertProviderAt(new BouncyCastleProvider(), 0);
# 添加服务器端的算法
JSch.setConfig("kex", JSch.getConfig("kex") + ",diffie-hellman-group1-sha1");
JSch.setConfig("server_host_key", JSch.getConfig("server_host_key") + ",ssh-rsa,ssh-dss");
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值