jsch远程sftp连接报错:Exception:Algorithm negotiation fail 的解决方案

问题:jsch-0.1.53.jar通过sftp远程连接ssh8.7版本的linux服务器报错Exception:Algorithm negotiation fail解决方案

问题描述

正式服A环境部署的服务后台程序中,有一个功能是通过jsch.jar包的中的方法实现通过账号密码sftp远程连接另一台服务器B,并进行文件传输。

由于连接配置这一块基本没动过,之前一直是正常的(能够连接成功,正常传输文件)。今天由于应标需要,得准备上报隐患功能的视频录制,系统点击提交一直不成功。检查后台日志,发现报这个错误:

在这里插入图片描述

解决措施

这个问题最终解决方案就是:升级程序中的jsch.jar包,改成更高的版本,就行了

解决思路

先是分析报错的日志信息,现象是程序通过sftp远程连接失败
然后排查B服务器是否正常,端口是否开放

确认B服务器正常,且端口开放后,通过正式服A检测端口:
Telnet ok

在这里插入图片描述

在A服务器终端通过sftp命令远程连接:
Sftp命令连接 ok

在这里插入图片描述

再通过系统,点击上报,还是失败,依旧报之前的错

在这里插入图片描述

得出结论:A服务器终端通过sftp命令可以连接成功,但是通过程序进行sftp连接就失败了。

查阅网上关于 Exception message is: Algorithm negotiation fail 报错的解答,大致意思是:报错原因是算法协商失败。具体呢,就是我们程序中的jsch包提供远程连接另一台服务器,会涉及到加密算法这个概念。sftp和ssh的加密算法是差不多的。

简单理解就是一台linux服务器,它会有个ssh的服务,不同版本的ssh会支持不同的加密算法,用于远程连接时的身份认证,主要为了加固连接隧道的安全性,避免窃听,连接劫持等攻击。那么我们程序的jsch包中提供的连接方法,就需要去支持指定ssh版本所使用的加密算法。保持一致后才能连接成功。

那么基本能确定,这个报错肯定跟ssh版本有那么几分关系了。然后我去咨询了网管部门的相关人员,沟通后得知,他们确实对服务器B进行了ssh的升级,主要是集团的网络安全要求,所有组件升级到最新稳定版本,避免安全漏洞。

因为服务器B使用的是ssh8.7版本,应该算是比较新的了

在这里插入图片描述

去maven官网仓库中查找到jsch的最新版本为0.1.55

在这里插入图片描述

在这里插入图片描述

我们程序里用的是0.1.53版本。

由于情况紧急,时间仓促,只能抱着试一试的心态去验证自己的猜想。于是在晚上11点多,打电话跟领导提了申请,备份了生产库上的程序包。自己在本地拉取了分支版本的源码,修改了jsch版本,改成了0.1.55版本。然后打包,加密,部署到生产库上。再打开日志监控,联系同事进行功能测试,…,通了…

在这里插入图片描述

这个问题最终解决方案就是:升级程序中的jsch.jar包,改成更高的版本,就行了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kyrielx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值