当前位置:   article > 正文

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

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)
	...
  • 1
  • 2
  • 3
  • 4

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

查看支持的算法

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

JSch.setLogger(new Slf4jLogger());
JSch.setLogger(new Log4j2Logger());
  • 1
  • 2

从日志中找到下面内容就可以看支持的算法,一般出现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.
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
使用命令查看服务器支持的算法
ssh -vvv 目标ip
  • 1

从输出结果找到下面内容就可以看到服务器所支持的算法。
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
...
  • 1
  • 2
  • 3
  • 4

解决方法

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");
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/665158
推荐阅读
  

闽ICP备14008679号