jsch包sftp连接报错java.io.IOException: End of IO Stream Read

七海恋空 2022-05-13 浏览(0 评论(0

参考文章:https://blog.csdn.net/Vertoria/article/details/82226340

最近维护的产品sftp分发出现了问题,报错提示:End of IO Stream Read。我们的产品也是靠调用jsch的包来实现sftp的。我按照上面文章的方法试了没有成功。改ssh配置,加算法没用,更新jsch包为jsch-0.1.52版本或更高版本还是没用。之前遇到这种情况,只是修改一下ssh配置就可以了,这次碰到了硬茬了。下面是我系统的环境:

操作系统:centos8.3.2011

ssh版本:OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021

java版本:jdk1.6.0_17-b04

经过一番测试不成功后,我试了一下最后一个方案,就是给jdk增加插件。可以参考这篇文章

参考文章:https://blog.csdn.net/qq_27468223/article/details/120453881

问题算是解决了吧,下面是操作步骤:

1.去https://mvnrepository.com/下载bcprov-jdk16-1.46.jar

2.将bcprov-jdk16-1.46.jar放到$JAVA_HOME/jre/lib/ext

3.修改$JAVA_HOME/jre/lib/security/java.security文件,添加以下内容,注意排序【security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider

4.将jsch升级到最新版,也就是把之前的jsch包替换成jsch-0.1.55.jar

当然问题解决了,但是遗留一个小问题。按上述方法配置,我本地windows10对centos8进行sftp没问题,在正式环境centos8对centos8进行sftp也没问题。但是我本地虚拟机centos7对centos8就是不行,不知道为什么,centos7对centos8咋就不行了,明明jar包都是一样的,java可是跨平台的。

**********************************后记20220518**************************************

漏洞修复还在继续,OpenSSH_8.0p1又升级到了OpenSSH_9.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

这回sftp又报错了,报错提示:

no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]

继续配置/etc/ssh/sshd_config文件,增加下面内容

HostKeyAlgorithms ssh-dss,ssh-rsa

整了好几天,这个ssh增加算法的关键字怎么这么多?从网上搜罗了一些:

Ciphers指定ssh能使的加密算法。多个加密算法之间使用逗号分隔。当Ciphers 的值以加号开始时,指定的加密算法将附加到默认集合,不影响默认集合中的其它算法。当Ciphers的值以减号开始时,指定的加密算法将会从默认集合中移除,不影响默认集合中的其它项目。

KexAlgorithms 选项指定可用的密钥交换算法。配置方法与 Ciphers 一致

HostKeyAlgorithms ssh-dss,ssh-rsa:指定密钥算法,优先级从高到低排