问题描述
如题,今天遇到个问题,使用JSCH的jsch-0.1.54.jar实现的sftp在连接目标服务器时报com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read异常,经查后发现是由于目标服务器的openssh升级至OpenSSH_7.4p1版本后导致的(可在服务器使用ssh -V命令查看openssh版本),原因如下:我使用的jdk是1.6的,jdk1.6支持的加密算法较少(jdk8支持了大多数加密算法),而openSSH7.4默认屏蔽了jdk1.6支持的加密算法,如:diffie-hellman-group1-sha1等。一句话就是:jdk1.6支持的加密算法和openSSH7.4声明支撑的加密算法不一致导致的。

解决方案
方案一:升级jdk到1.8,openSSH配置文件不变(未亲测,但本文摘自的博客的博主亲测可用)

注意:

因为有的地方会说要在代码中指定diffie-hellman-group1-sha1算法(详见方案二),这里千万不要画蛇添足。

该方案从升级jdk入手,jdk8支持了大多数加密算法。该方案不需要修改任何配置文件。

方案二:保持jdk1.6,修改openSSH配置文件(未亲测,但本文摘自的博客的博主亲测可用)

1、修改/etc/ssh/sshd_config配置文件,添加jdk1.6支持的加密算法,如下:

KexAlgorithms +diffie-hellman-group1-sha1

注意:

如果用的是jsch-0.1.52 jar包,按上述方法修改完即可。
如果用的是jsch-0.1.53及以上jar包,还需要对代码做如下修改:
   修改代码,在session中指定加密算法为:diffie-hellman-group1-sha1,如下所示:

Properties sshConfig = new Properties();

sshConfig.put("kex", "diffie-hellman-group1-sha1");

这是为什么呢?

因为,建立连接时openSSH会把它支持的所有加密算法发给jsch,让jsch从中挑选一个(如果不清楚SSH连接,请先了解SSH建立原理)。

如果列表中有diffie-hellman-group1-sha1算法,jsch-0.1.52则会优先选择该算法(如果没有则任选一个,如果jdk不支持选择的算法,就会报错),这个算法恰好是jdk1.6支持的,所以连接成功。而jsch-0.1.53及以后的jar包默认选择其他算法(具体是什么还需确认),该算法jdk1.6不支持,所以报错。

如果要使用jsch-0.1.53及以后的jar包,就需要在代码中指定使用diffie-hellman-group1-sha1算法。

方案三:安装java安全插件,不用升级jdk不用修改openssh配置(亲测不可用,不知道为啥)

1、安装java安全插件:Java Cryptography Extension(JCE) Unlimited Strength Jurisdiction Policy Files。

安装方法参考:https://blog.csdn.net/hfhwfw/article/details/68557238

对应版本如下:

版本

对应插件名称

下载地址

jdk6

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

jdk7

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

jdk8

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

方案四: 引入bouncycastle加密包,不需升级jdk或更改openssh配置文件(亲测可用)

安装方法参考https://blog.csdn.net/cshichao/article/details/8732670

PS:bouncycastle最新版下载地址http://www.bouncycastle.org/latest_releases.html,在SIGNED JAR FILES处表格的Provider列找到对应jdk版本的jar包即可,下载bcprov-jdk15on-160.jar(160是版本号)。

原文链接:https://blog.csdn.net/Vertoria/article/details/82226340

解决JSCH的sftp连接时出现的com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stre相关推荐

  1. 小米盒子显示服务器断开连接怎么办,如何解决小米盒子WiFi连接时频繁掉网、断网的问题?...

    解决小米盒子WiFi连接时频繁掉网.断网的问题具体方法如下: 电脑浏览器进入路由器设置页面(一般为192.168.1.1,有的是192.168.1.253),转发规则-upnp设置为关闭. 开启DHC ...

  2. 解决远程控制软件在连接时无法正常显示浏览器、视频播放器等软件界面的问题

    问题描述 在使用一些远程控制软件(如TeamViewer或者向日葵等)进行远程连接时无法正常显示浏览器.视频播放器.VS等软件的界面,会变成一个白屏或黑屏怎么办? 原因剖析 原因一:笔记本合上盖子关闭 ...

  3. 解决PHP与mysql连接时,报Fatal error: Uncaught Error: Call to undefined function mysql_connect()错误

    今天在搭建LNMP测试环境时,在测试PHP与mysql的连通性,打开网页时,报错如下: 检查下写的PHP文件,发现有语法错误,如下: 解决办法: 把mysql_connect改成mysqli_conn ...

  4. 【MRI】解决DPABI计算功能连接时路径冲突

    文章目录 问题描述 解决方法 问题描述 未定义与 'struct' 类型的输入参数相对应的函数 'file2mat'. 解决方法 参考 Error file2mat 确保添加DPABI和SPM的目录以 ...

  5. 解决Cisco *PN Client 连接时提示:Reason 442: Failed to Enable Virtual Adapter的问题

    操作系统:Win XP.Win 7 Cisco *PN Client版本:5.0.07.0290 最近在公司通过Cisco *PN Client客户端连接到客户公司局域网的时候经常报错,提示信息如下: ...

  6. 解决MAC上Django连接Mysql django.db.utils.OperationalError: (2003, Can't connect to MySQL 的问题

    Steven 最近在mac电脑是开发Django项目,但是遇到了一个很棘手的问题,就是跑Django程序连接Mysql始终报错,最开始的问题是password的问题,后来把password改过来之后, ...

  7. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败

    成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败 ...

  8. XenApp6 建立请求的连接时出错解决方法

    在XenApp 6安装完成后出现问题,无法打开应用程序,显示"建立请求的连接时出错". 相关错误截图如下: 通过Qfarm /load发现值为20000. 解决方法: 1.检查策略 ...

  9. 解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused

    解决redis-cli连接时Could not connect to Redis at 127.0.0.1:6379: Connection refused 原因:服务端未启动 [root@local ...

最新文章

  1. 基于GA的TSP问题
  2. Python天气预报数据获取脚本
  3. 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
  4. 概要设计说明书案例_逆向前行,趁势而为外贸学院线上教学优秀案例展(七)...
  5. 预测未来 盘点大数据分析领域五大趋势
  6. IntelliJ IDEA 自动补全变量名称和变量类型(自动补全变量的声明内容)
  7. java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...
  8. 用C#编写一个抓网页的应用程序
  9. kafka java消费者消息拉取
  10. Ubuntu录制gif动态图
  11. 微信小程序调用百度地图api遇到的小坑之renderReverse参数
  12. vue+node项目部署上线
  13. css 背景图片虚化
  14. 网络调试助手连接远程服务器
  15. OpenGL ES 帧缓冲区位块传送(Blit)
  16. Java项目:自习室图书馆座位预约管理系统(java+SSM+JSP+easyUI+mysql)
  17. 2021年新安装的Win7系统,Windows Update无法更新,提示错误代码80072EFE
  18. 数据安全需要做什么?
  19. 抢票(python)
  20. 值得珍藏的28本股市投资经典著作

热门文章

  1. 【算法加速】区分ASIC与CPU、GPU、FPGA几个概念
  2. 虚幻四蓝图实战(人物切换汽车控制)
  3. 计算机系统配置有哪些内容,组装电脑主要配置有哪些丨组装电脑主要配置图解...
  4. cvc-complex-type.2.4.d: 发现了以元素 ‘base-extension‘ 开头的无效内容。此处不应含有子元素。
  5. codeblocks shotcut
  6. 人工智能数学基础--导数1:基础概念及运算
  7. win7连接共享“请检查名称的拼写.否则网络可能有问题”
  8. 扣扣邮箱的协议服务器地址,使用SMTP协议,通过QQ邮箱发送邮件
  9. IOS 自带的邮箱配置QQ邮箱
  10. Java基础(六)——多线程的基本使用与原理