参考文章: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 一致