由于连接sftp所用jar最终会使用jsch的包。然而jsch的包会有各种版本问题。来梳理一下,
根源是jdk1.6支持的加密算法较少(jdk8支持了大多数加密算法),而openSSH8.0默认屏蔽了jdk1.6支持的加密算法,如:diffie-hellman-group1-sha1等。openSSH7的版本能支持1.6的算法。
首先查看主机ssh命令,执行ssh -v
因为一台主机可能放多个项目,那么不能换全局的jdk。每个项目可以指定jdk启动,在tomcat的bin目录下setclasspath.sh,和catalina.sh中增加
export JAVA_HOME=/ecp_web/jdk1.8/jdk1.8.0_171(jdk路径)
export JRE_HOME=/ecp_web/jdk1.8/jdk1.8.0_171/jre(jre路径)
- jdk1.6+OpenSSH8.0+jsch1.0.50.jar(不行,最原始版本)
OpenSSH8.0对应的jsch包应该在52版本或者更高
- jdk1.6+OpenSSH8.0+jsch1.0.52.jar(有解决方案。网上说法,未亲测)
修改/etc/ssh/sshd_config文件,增加sshd的算法配置。
KexAlgorithms +diffie-hellman-group1-sha1
- jdk1.6+OpenSSH8.0+jsch1.0.53.jar(有解决方案。)
在2的基础上,代码增加
Properties sshConfig = new Properties();
sshConfig.put("kex", "diffie-hellman-group1-sha1");
- jdk1.7+OpenSSH8.0+jsch1.0.52.jar(不行)
- jdk1.8+OpenSSH8.0+jsch1.0.52.jar(亲测可行)
总结:当ssh版本做了大的升级后,需要对应的jsch包做升级。Jdk也要做升级。但考虑到整体项目的编译情况,建议不要换用jdk。而是取2方案。
来源:CSDN
作者:185的阿平
链接:https://blog.csdn.net/weixin_42740540/article/details/103758324