ch.ethz.ssh2报错java.io.IOException: Key exchange was not finished, connection is closed.

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

文章描述了在使用ch.ethz.ssh2库连接远程服务器时遇到的KeyExchange未完成错误,通常的解决方案是修改sshd_config文件中的KexAlgorithms、HostKeyAlgorithms和MACs参数。然而,作者指出这可能并不总是有效,需要检查客户端和服务器之间的算法匹配。通过分析ch.ethz.ssh2的源码,发现需要确保服务端配置包含客户端支持的算法。

ch.ethz.ssh2连接远程服务器的时候报错:

java.io.IOException: Key exchange was not finished, connection is closed.
at ch.ethz.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:75)
at ch.ethz.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:169)
at ch.ethz.ssh2.Connection.connect(Connection.java:759)
at ch.ethz.ssh2.Connection.connect(Connection.java:628)
at com.act.datasmart.operators.utils.RemoteShellUtil.login(RemoteShellUtil.java:33)
at com.act.datasmart.operators.RemoteShellOperator.action(RemoteShellOperator.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
...
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:955)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
at ch.ethz.ssh2.transport.ClientKexManager.handleMessage(ClientKexManager.java:123)
at ch.ethz.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:572)
at ch.ethz.ssh2.transport.TransportManager$1.run(TransportManager.java:261)
at java.lang.Thread.run(Thread.java:748)

看到很多文章都是执行以下三步:
1、修改配置文件

vim /etc/ssh/sshd_config

2、修改KexAlgorithms参数

KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org

3、重启服务

service sshd restart

但是实测发现KexAlgorithms只是其中一种原因,不一定能解决各位的问题,现在跟着代码看是哪些原因导致。

1、找到ch.ethz.ssh2.transport.KexManager类,其中有个方法mergeKexParameters,这个就是匹配服务端客户端两边相关参数通用的算法,底层调用getFirstMatch去比较二者相同的算法。
定位到以下三个地方
在这里插入图片描述

其中kex_algo比较的是KexAlgorithms参数的值,定位到其init方法,发现ch.ethz.ssh2默认支持的kex算法是"diffie-hellman-group-exchange-sha1", “diffie-hellman-group14-sha1”, “diffie-hellman-group1-sha1”,所以sshd_config里KexAlgorithms参数需要有其中之一。

在这里插入图片描述在这里插入图片描述同理,定位到HostKeyAlgorithms默认支持"ssh-rsa",“ssh-dss”,
可在sshd_config里加上
HostKeyAlgorithms +ssh-dss,ssh-rsa
mac_algorithms_client_to_server默认值为"hmac-sha1-96”, “hmac-sha1”, “hmac-md5-96”, "hmac-md5”,
所以sshd_config里MACs参数至少得包含其中一种

利用ch.ethz.ssh2操作 利用ch.ethz.ssh2操作进行SSH进行操作下载文件代码,主要利用Linux命令进行操作,方便简单 立即下载

相关推荐

SSH2依赖包解压可用已测试

在网上看了很多关于SSH2依赖包的文章,按照上面的提示试了很多次,终于成功部署了,如果能够一步到位,就省了很多事,特制作本lib供需要的同学下载。在tomcat6.0.35上测试通过。依赖包版本: Spring 3.0.4 Struts 2.3.4 hibernate3

Key exchange was not finished, connection is closed.解决办法

Key exchange was not finished, connection is closed 解决办法

weixin_45266856的博客 9422

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 525

Key exchange was not finished, connection is closed

Caused by: java.io.IOException: Key exchange was not finished, connection is closed.”的解决方案。java代码连接Linux服务器时,报错“There was a problem while connecting to XX.XX.XX.XX。(1)在/etc/ssh/sshd_config文件最后一行加上(文字。(2)重启sshd服务。

weixin_38203586的博客 3323

AMESim柱塞泵建模全指南:从HCD库搭建到联合仿真

液压系统仿真中,轴向柱塞泵的建模始终是难点与热点。柱塞泵结构紧凑、功率密度高,在工程机械与航空航天领域应用广泛,然而其运动学与流体细节深度耦合,给仿真带来不小挑战。AMESim平台中的HCD库提供了一种从物理结构出发的建模思路,将柱塞泵分解为容积腔、节流口与机械约束等基础单元,从而真实刻画柱塞腔压力波动、配流特性和容积效率等关键行为,摆脱黑盒模型的局限。基于机理建模的仿真结果,可用于泵参数优化、故障特征分析以及控制策略验证。进一步结合AMESim与Simulink联合仿真,可以高效开发变量泵排量控制系统,研

weixin_29159441的博客 290

《Kubernetes部署篇:基于x86_64+aarch64架构CPU+containerd一键离线部署容器版K8S1.33.3高可用集群》

《Kubernetes部署篇:基于x86_64+aarch64架构CPU+containerd一键离线部署容器版K8S1.33.3高可用集群》

东城绝神 1369

Key exchange was not finished, connection is closed Cannot negotiate, proposals do not match

保存后,重启ssh服务 /etc/init.d/ssh restart。ubuntu系统报错。

DynastyTing的专栏 1210

python爬虫自动下载网页链接

需求分析 今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的: Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的pytho...

da_kao_la的博客 1万+

Java中ch.ethz.ssh2.Connection对象的使用

       在项目中,后端开发中有时候需要获得一些远程服务器的数据进行业务处理,遇到这种情况,很容易联想到和数据库类似,通过连接对象远程连接服务器,通过调用服务器上的Shell脚本或执行命令来获取我们所需要的数据,我在这里使用了ch.ethz.ssh2.Connection类,特此记录一下,希望能对看到这篇文章的读者有所帮助。这个网址是相应的接口文档,读者可以根据需要进行查阅。        ...

拓荒者的博客 2万+

深入解析Android SoundTrigger架构:从HIDL到AIDL的演进与实践

本文深入解析Android SoundTrigger架构,从HIDL到AIDL的演进与实践。SoundTrigger是Android系统中低功耗语音唤醒的关键技术,通过分层设计和硬件协同实现高效语音识别。文章详细介绍了核心组件、HIDL与AIDL的对比及优化技巧,帮助开发者掌握语音模型优化和功耗管理。

brown的博客 231

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 274

Key exchange was not finished,connection is closed近期遇到这个错误sshd更新导致的

Key exchange was not finished,connection is closed cannot negotiate,proposals do not match. 近期遇到这个错误sshd更新导致的问题, 有说jekins的某某, 说虚拟机设置Host Key Verification Strategy选项改选为Non verifying VervificationStrategy就可以解决这个问题了! 有说github的如下图: 我的是SSH漏洞更新导致的 ..

lingyudeai的博客 2万+

用 SNC 和 SAP Single Sign-On Secure Login 把 SAP 登录这件小事,变成一件安全又不用输密码的事

在传统的 SAP 系统里,登录这件事看起来很朴素:用户打开 SAP GUI,输入一个 SAP 用户名,再输入一个 SAP 密码,点回车,进系统,开始干活。表面上没毛病,但从安全角度看,这种老办法问题很大。默认情况下,这些用户名和密码在网络上传输时是明文,也就是不加密传输。攻击者如果在公司网络里做监听,理论上可以直接截取到口令信息,这种风险对今天任何一家合规要求高、审计严格的企业来说,基本是不可接受的。(SAP Help Portal)SAP 给出的答案叫做 ,全称是 。SNC 做的事情可以概括成两类:一类是

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 379

ganymed-ssh2连接服务器出现java.io.IOException: Key exchange was not finished, connection is closed.原因

java.io.IOException: Key exchange was not finished, connection is closed. at ch.ethz.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:75) ~[ganymed-ssh2-262.jar!/:262] at ch.ethz.ssh2.transport.TransportManager.getConnectionInfo(Transp.

u014639848的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

连接服务器报错:Key exchange was not finished, connection is closed.

在/etc/ssh/sshd_config最后添加如下行内容解决问题。

JAVA求生之路——博主406766467 2424

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssh Key exchange was not finished sshd

报错: ssh Key exchange was not finished 则需修改sshd文件 链接:Key exchange was not finished,connection is closed近期遇到这个错误sshd更新导致的 - it610.com 需在 在/etc/ssh/sshd_config最后添加如下行内容解决问题 KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-he..

hello 4814

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

解决jenkins连接节点报错No entry currently exists in the Known Hosts file for this host. Connections will b

解决jenkins连接节点报错No entry currently exists in the Known Hosts file for this host. Connections will b

空山新雨后,天气晚来秋 1446

Java代码利用ch.ethz.ssh2对linux进行操作

这时我们可以使用类似SFTPv3Client 等方式来获取返回值。这个同样是 ch.ethz.ssh2包下的,和上面的pom依赖是一样的。使用 h.ethz.ssh2.Session 的 execCommand 方法执行cmd指令。我们有时候不仅仅是需要执行cmd指令,我们还需要像黑窗口时一样获取指令的返回值。1.首先需要增加依赖。Java代码示例如下。

weixin_45933454的博客 1468

java.io.IOException: Key exchange was not finished, connection is closed.Cannot negotiate, proposa

【代码】java.io.IOException: Key exchange was not finished, connection is closed.Cannot negotiate, proposa。

zhaofuqiangmycomm的博客 950

java通过SSH连接调用服务器模型运算

近期在进行项目开发中,遇到需要使用java进行模型调用的接口封装,在进行Linux服务器模型计算调用中遇到难题,经过在网上查找资料,整理一篇跨平台调用运算的实现。

weixin_38863607的博客 750

解决jenkins master挂载slave SSH Key Exchange not finished的问题

1.报错日志 [01/19/15 17:17:13] Opening SSH connection to 192.168.1.108:22. Key exchange was not finished, connection is closed. ERROR: Unexpected error in launching a slave. This is probably a bug in Jenkins. java.lang.IllegalStateException: Connection is not

constant_rain的博客 3077

安装在win10环境下的Jenkins添加本地虚拟机centos7作为从机遇到的问题,报错:SSH Connection failed with IOException: "Key exchange

首先声明我的Jenkins版本是:2.31版。因为不同版本页面有所不一样 安装在win10环境下的Jenkins添加本地虚拟机centos7作为从机遇到的问题,报错情况如下: Searching for 192.168.0.104 in C:\Users\fushaolei\.ssh\known_hosts Searching for 192.168.0.104:22 in C:\Users\...

wise18146705004的博客 8784

Java 操作SSH2实现远程执行linux命令

1、引入依赖 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency> 2、SSH2Util 工具类封装 import ch.ethz.ssh2.Connection; import ch.ethz.s

Test_Box 1692
上一篇: ftp查看根目录对应的linux目录位置
IT-Billy
博客等级 码龄7年 9粉丝 19原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值