记录JSch连接SFTP Exception:Algorithm negotiation fail问题解决

news/2024/9/21 1:47:29/文章来源:https://www.cnblogs.com/zcy99/p/18354443

问题描述:关于正式环境访问外网连接不成功


 

1、首先检查是否开放防火墙(已确认开放),策略开放后,通过命令连接是否畅通:

 通过telnet命令,可以得出,访问畅通。

telnet 192.168.1.1 22

 

2、查看生产环境日志,观察生产环境访问外网服务器异常:

抛出异常,提示:算法协商失败

com.jcraft.jsch.JSchException: Algorithm negotiation fail

  


 

3、查找生产代码,本地通过代码模拟连接sftp,还原问题,

通过查看生产环境,jar引入为jsch-0.1.54

代码示例:

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;import java.io.FileOutputStream;
import java.io.OutputStream;public class SFTPDownloadExample {public static void main(String[] args) {String host = "192.168.1.1";int port = 22;String user = "admin";String password = "root";String remoteFile = "/PEP/ac.ZIP";String localFile = "ac.ZIP";JSch jsch = new JSch();Session session = null;ChannelSftp channelSftp = null;try {// Connect to the serversession = jsch.getSession(user, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect();// Open an SFTP channelChannel channel = session.openChannel("sftp");channel.connect();channelSftp = (ChannelSftp) channel;// Download the filetry (OutputStream outputStream = new FileOutputStream(localFile)) {channelSftp.get(remoteFile, outputStream);}System.out.println("File downloaded successfully!");} catch (Exception e) {e.printStackTrace();} finally {if (channelSftp != null && channelSftp.isConnected()) {channelSftp.disconnect();}if (session != null && session.isConnected()) {session.disconnect();}}}}

使用测试类,执行此示例代码,模拟生产环境请求。

 本地重现问题,可以确认访问是没有问题的,可能出现在jar包或ssh版本上。

sftp和ssh使用的是同一加密算法,算法协商失败,意思就是客服端和服务端支持的算法不一致,然后就出现这个提示,因此需要检查一下支持的算法。


 

4、查看SSH版本

ssh -V

 生产环境使用的版本为5.3

可以使用以下命令查看 Linux 服务器 SSH 默认支持的算法:

ssh -Q cipher
ssh -Q mac
ssh -Q kex
ssh -Q key

这些命令会列出支持的加密算法、消息认证码 (MAC) 算法、密钥交换算法和公钥算法。

如果 ssh -Q 命令不可用,你可以查看 SSH 配置文件 /etc/ssh/sshd_config 来了解支持的算法。你也可以使用 ssh -vv 进行调试,这将显示 SSH 客户端在连接时使用的详细信息,包括支持的算法。例如:

ssh -vv user@hostname

在输出中,你会看到有关加密算法、MAC 和密钥交换算法的信息。

默认情况下,SSH通常支持以下几种算法:
1. 加密算法:AES (Advanced Encryption Standard) 和 3DES (Triple Data Encryption Standard)。 2. 散列算法:SHA-2 (如SHA-256、SHA-512)。 3. 密钥交换算法:Diffie-Hellman (DH) 和 Elliptic Curve Diffie-Hellman (ECDH)。
这些算法可以根据具体的SSH实现和版本有所不同。
 

我们当前使用的 jsch-0.1.54.jar 包,此版本大概为2016年9月3日

在这个版本中,JSCH 支持的默认算法主要包括:加密算法:
对称加密算法:aes128-cbc, aes192-cbc, aes256-cbc, blowfish-cbc, 3des-cbc

消息认证码 (MAC) 算法: hmac-md5, hmac-sha1
密钥交换算法: diffie-hellman-group1-sha1
公钥算法: ssh-rsa, ssh-dss 这些算法在较新的版本中可能会有所变化或增加新的选项

 

解决方案:

1、将jsch版本升级到新一点的版本

2、服务器向下兼容低版本算法

3、降低SSH版本,让对应的客户端可以直接连上,卸载当前ssh,安装别的版本

JDK版本1.7以下,对应支持的算法较少,需要单独在JDK中进行配置


 

1、将jsch版本升级到新一点的版本

  获取新的jar包,替换掉当前版本的jar包,重新启动服务,测试是否可以访问。

2、服务器向下兼容低版本算法

  修改ssh的配置文件

/etc/ssh/sshd_config

  在配置文件后新增

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

对应的算法必须包含客户端需要支持的算法,配置完成后重启ssh服务

要重启 SSH 服务,可以使用以下命令,具体命令可能取决于你使用的 Linux 发行版:对于基于 systemd 的系统(如 Ubuntu 16.04 及以后版本、CentOS 7 及以后版本):
sudo systemctl restart sshd对于基于 SysVinit 的系统(如较旧的 Debian 版本):
sudo service ssh restart

  • service sshd restart:通常用于基于 SysVinit 的系统。
  • systemctl restart sshd.service:用于基于 systemd 的系统。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781626.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zkw线段树

zkw 线段树 - 非递归线段树实现方法介绍 非递归线段树实现方法,码量较短。 zkw 线段树的构造原理: 普通线段树采用堆存储,zkw线段树 本质上是满二叉树(若没有该区间则为空点) 但根据实际情况,原区间不一定构成满二叉树,据查询方式限制,空间开到最接近的 \(2^n\)(据性质…

张昆玮线段树

zkw 线段树 - 非递归线段树实现方法介绍 非递归线段树实现方法,码量较短。 zkw 线段树的构造原理: 普通线段树采用堆存储,zkw线段树 本质上是满二叉树(若没有该区间则为空点) 但根据实际情况,原区间不一定构成满二叉树,据查询方式限制,空间开到最接近的 \(2^n\)(据性质…

全红婵夺冠!数业智能心大陆告诉你原生家庭在背后发挥了怎样的力量

2024年巴黎,全红婵在十米跳台上的完美一跃, 再次定义了跳水艺术,水花消失术成为她的代名词!全红婵的辉煌成就,不仅点亮了自己,也照亮了家庭的未来。 而他的家人也非常珍视全红婵的成功。 其父亲坚定的表示:”我们不能消费女儿“。 “不能因为她拿了冠军,我连活都不干了。…

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案[含ollama部署]

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案-含ollama部署无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案 1.Dify 简介 1.1 功能情况 Dify,一款引领未来的开源大语言…

基于 JavaFx 搭建的实用小工具集合

xJavaFxTool —— 一个基于 JavaFx 搭建的实用小工具集合,包括文件复制、Cron表达式生成器、编码转换、加密解密等几十种开发中常用的工具。大家好,我是 Java陈序员。 作为一名后端程序员,常常需要在电脑上安装各种工具软件来支持日常开发。 那么,是否有一款工具集合,包含…

ubuntu开机等待网络连接问题

修改/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service文件sudo vim /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service添加内容:TimeoutStartSec=2sec 修改sudo vim /etc/netplan/01-network-manage…

(七)Redis 持久化 AOF、RDB

Redis 持久化 AOF、RDBRedis 一旦服务器宕机,内存中的数据将全部丢失,从后端数据库恢复这些数据,对数据库压力很大,且性能肯定比不上从 Redis 中读取,会拖慢应用程序。所以,对 Redis 来说,实现数据的 持久化 ,避免从后端数据库中进行恢复,是至关重要的。 1、AOF 日志 …

uniapp 渲染卡顿的几个问题

1.渲染时禁止使用 uni.getStorageSync。会卡顿2.做大量的浮点运算。数据类型转换等。能先算好的就算好。

观存储历史,论数据未来

在探索未来的数据存储技术时,我们不禁感慨于人类智慧的无限可能。从古代的竹简、木简,到蔡伦的造纸术,再到现代的机械硬盘、固态硬盘,直至云存储和前沿的DNA存储与量子存储,技术的演进总是令人惊叹。历史告诉我们,在时间面前,所有不可逾越的技术壁垒都是纸老虎。对于程序…

洛谷题单指南-前缀和差分与离散化-P5937 [CEOI1999] Parity Game

原题链接:https://www.luogu.com.cn/problem/P5937 题意解读:已知长度为n的01序列,给出m个判断,每个判断认为l~r之间1的个数是偶数或者奇数,计算前多少个判断是正确的。 解题思路: 先用前缀和思想来思考本题:假设s[i]是序列前i个数的和 对于每一个判断,有两种可能 第一…

深入理解 PHP 高性能框架 Workerman 守护进程原理

守护进程顾名思义就是能够在后台一直运行的进程,不会霸占用户的会话终端,脱离了终端的控制。相信朋友们对这东西都不陌生了吧?如果连这个概念都还不能理解的话,建议回炉重造多看看 Linux 进程管理相关的基础知识。大家好,我是码农先森。 守护进程顾名思义就是能够在后台一…

IT基础书籍汇集_sum

希望STUDENT过软考,所以有些基础书籍还是需要看看 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------虽然书籍,标注“著”的书籍…