sftp连接报错 com.jcraft.jsch.JSchException: Algorithm negotiation fail

xbba2004 2020-03-02 09:42:01
原始环境:
JDK版本 1.6
使用插件 jsch-0.1.55.jar
问题:
给远端主机使用sftp报错com.jcraft.jsch.JSchException: Algorithm negotiation fail


使用 ssh -vvv ip 命令和远端主机对比


以上原理解释引用
https://my.oschina.net/greatqing/blog/740179

冷静下来,回到这个异常Algorithm negotiation fail,其字面意思是算法协商失败。查看jsch源码,异常发生在connect阶段。上网查找资料(SSH协议介绍),发现SSH通讯过程的五个阶段中,有一个是密钥和算法协商阶段,在这个阶段, 双方根据本端和对端支持的算法,协商出最终使用的算法。问题就应该出在了这里。不同版本的OpenSSH默认的算法列表不同,导致了算法协商失败。参考com.jcraft.jsch.JSchException: Algorithm negotiation fail

那么如何才能知道不同版本OpenSSH默认的算法列表呢?参考What's openssh default kexalgorithms?通过ssh -vvv serverIp命令,如如上图所示:

百度各种解决方法很多都需要服务端添加配置文件,还需要重启服务。需要对端配合(舍弃该方式)

各种尝试后解决方案需要调整以下两步
1、升级jdk
2、调整连接的配置

本人将jdk从jdk1.6升级至1.7最后升级为1.8,若jdk版本不升级则会报错
com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read

调整连接配置添加配置代码
Properties sshConfig = new Properties();
sshConfig.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256");
参考:https://stackoverflow.com/questions/26424621/algorithm-negotiation-fail-ssh-in-jenkins



完成以上两步,则可以正常连接和使用sftp上传文件
...全文
4487 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
aixiongtw 2022-11-24
  • 打赏
  • 举报
回复
请问jdk为什么一定要升级呀

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧