Jsch版本升级引发的血案

2024-01-26 05:52

本文主要是介绍Jsch版本升级引发的血案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

我们项目需要通过SFTP对接大量上下游获取数据,但是由于某一个上游需要更换AWS Transfer Family作为他们的SFTP服务,他们的SFTP服务使用更高版本的OpenSSH服务,原有的一些密钥算法已经不再支持,我们目前使用的Jcraft公司发布的Jsch版本已经没办法满足,需要进行升级。但是Jcraft公司的Jsch0.1.55版本从2018年开始就停止维护,我们不得不升级到另一个mwiede继续维护的Jsch版本(基于原有0.1.55fork的分支)以满足更多算法的需要。

当前使用的JDK版本: 1.8.0_152-b16

升级前:

<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version>
</dependency>

升级后:

<dependency><groupId>com.github.mwiede</groupId><artifactId>jsch</artifactId><version>0.2.16</version>
</dependency>

升级Jsch版本后,该上游的AWS Transfer FamilySFTP服务能成功连接,但是我们其他上下游的陆陆续续连接失败,分别报以下几种类型的错误:

  • com.jcraft.jsch.JSchProxyException: ProxySOCKS5: stream is closed"
  • com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: DH key size must be multiple of 64, and can only range from 512 to 2048 (inclusive). The specific key size 3047 is not supported.
  • com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName=“server_host_key” jschProposal=“ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256” serverProposal=“ssh-rsa,ssh-dss”

解决方案

经排查,以上问题主要原因如下:

  • com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName=“server_host_key” jschProposal=“ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256” serverProposal=“ssh-rsa,ssh-dss” - RSA/SHA1 签名算法在新版本Jsch中由于安全原因已经被默认关闭,由于有些上下游仍然使用旧版本的OpenSSH服务,因为没办法新版Jsch没办法连接,从以上报错信息可以看到,对方服务器需要ssh-rsa,ssh-dss,因此我们需要在创建连接前对SFTP Session额外添加以下配置:
session.setConfig("server_host_key", session.getConfig("server_host_key") + ",ssh-rsa");
session.setConfig("PubkeyAcceptedAlgorithms", session.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa,rsa-sha2-256")
  • com.jcraft.jsch.JSchProxyException: ProxySOCKS5: stream is closed" - 同上,由于我们代理服务器也是使用的是旧版OpenSSH,因此加入上面配置即可。
  • com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: DH key size must be multiple of 64, and can only range from 1024 to 2048 (inclusive). The specific key size 3047 is not supported. - 这是由于当前JDK版本不支持更高位数的Diffie-Hellman密钥交换算法的密钥长度,这里我们可以通过以下参数指定推荐的密钥长度
session.setConfig("dhgex_min", "1024")
session.setConfig("dhgex_max", "2048")
session.setConfig("dhgex_preferred", "2048")

完整代码如下:

  // 设置JSchJSch jsch = new JSch();Session session = jsch.getSession(user, host, PORT);session.setPassword(passwd);// 设置配置信息java.util.Properties config = new java.util.Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);session.setConfig("server_host_key", session.getConfig("server_host_key") + ",ssh-rsa");session.setConfig("PubkeyAcceptedAlgorithms", session.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa,rsa-sha2-256");session.setConfig("dhgex_min", "1024");session.setConfig("dhgex_max", "2048");session.setConfig("dhgex_preferred", "2048");// 连接到服务器session.connect();

这篇关于Jsch版本升级引发的血案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/645826

相关文章

ssh版本升级导致连接失败

公司系统使用的是第三方ssh插件jsch-0.1.39.jar,之前采集正常的,但是厂家服务器ssh升级成2.0版本,然后程序就报错,异常如下: com.jcraft.jsch.JSchException: Algorithm negotiation failat com.jcraft.jsch.Session.receive_kexinit(Session.java:510)at com.

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

引发蛀牙、避免蛀牙食物大全

引发蛀牙、避免蛀牙食物大全 引发蛀牙的食物大全: 糖果 糖浆 糖果棒 巧克力 碳酸饮料 果汁 口香糖 蜂蜜 蛋糕 甜点 薯片 脆饼干 果酱 果冻 蜜饯 蜜饯果干 避免蛀牙的食物大全: 高纤维蔬菜 水果 坚果 种子 高钙乳制品 高蛋白质肉类 高蛋白质鱼类 绿茶 水 蔬菜汤 鸡汤 酸奶 酸奶制品 奶酪 红薯 土豆 面包和全麦面包 芝士

捉虫笔记(四)-- 空格引发的悬案

空格引发的悬案 1、描述现象: 在代码中有一段利用rmdir指令删除目录代码,但是有用户反馈一直删除失败,但是有没有看到错误的日志信息,正好有同事能复现,所以今天好好探究一番。 2、思考过程 很好奇的一点就是为什么有的环境就是正常。 首先想到2个问题: ①代码有没有执行。 ②假如执行,有没有错误。 关于这两个问题都有个难点,我该如何下断点: 2.1、分析代码是否执行 删除目录的

android项目从低版本到高版本升级时一般需修改的配置

1、app目录下build.gradle 文件SdkVersion  和依赖:dependencies 2、ToastDemo目录下build.gradle 3、修改Gradle Version 4、修改MainActivity.java导入包

“苹果税”引发的苹果与腾讯、字节跳动之间的纷争与博弈

北京时间9月10日凌晨一点的Apple特别活动日渐临近,苹果这次将会带来iPhone16系列新品手机及其他硬件产品的更新,包括iPad、Apple Watch、AirPods等。从特别活动的宣传图和宣传标语“閃亮時刻”来看,Apple Intelligence将会是史上首次推出,无疑将会是iOS 18的重头戏和高光时刻。 不过就在9月2日,一则“微信可能不支持iPhone16”的

VMWARE VCENTER6.7 VCSA通过Web5480进行版本升级

VCENTER当前版本如下图 操作前先给VCENTER打一个快照,出问题可以立即回退 1、先下载VCSA镜像,并将VCSA镜像上传至DataStore中; 2、选中VCSA虚拟机,编辑配置 3、挂载新上传的VCSA镜像,一定要勾选“已连接”和“打开电源时连接” 4、登录VCENTER的5480界面,https:X.X.X.X:5480 点击更新,多等一会可以刷新出新版本

百度文心一言 App 获推 4.0.0 版本升级:更名文小言、9 月内文心 4.0 大模型免费用!

百度文心一言 App 获推 4.0.0 版本升级:更名文小言、9 月内文心 4.0 大模型免费用! 文小言4.0.0版本重磅发布:AI新时代的引领者!💥 随着科技的飞速发展,AI已经深入到我们生活的方方面面。2024年9月,百度正式发布了文心一言App的4.0.0版本,并更名为**“文小言”**。这一升级不仅象征着技术的飞跃,也预示着AI能力即将更广泛应用到日常场景中。那么,这款备受关注的A

Navicat导入时由分号引发的诡异问题

最近在将第三方提供的一个sql导入到自己的数据库的时候,(Event部分的脚本)总是提示错误: [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)

概述 从 WWDC 23 开始,苹果推出了全新的数据库框架 SwiftData。它借助于 Swift 语言简洁而富有表现力的特点,抛弃了以往数据库所有的额外配置文件,只靠纯代码描述就可以干脆利索的让数据库的创建和增删改查(CRUD)一气呵成。 在本系列博文中,我们将从一个简单而“诡异”的运行“事故”开始,有理有据的深入探寻一番 SwiftData 中耐人寻味的“那些事儿”。 在本