赞
踩
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");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。