问题背景

测试环境sftp采用的jsch作为客户端来连接服务端进行文件传输,然后应用部署到生产后报错,算法协商失败

com.jcraft.jsch.JSchException: Algorithm negotiation fail

问题分析

Algorithm negotiation fail 算法协商失败

sftp和ssh用的是同一套加密算法,算法协商失败为客户端与服务端所支持的算法不一致,导致报该异常。解决方法为统一客户端及服务端所支持的算法。

检查客户端及服务端的版本

查看ssh版本: ssh -V
有问题的生产环境为:8.5

没问题的测试环境为:7.4

ssh默认支持的算法为

OpenSSH enables only the following key exchange algorithms by default:
- curve25519-sha256@libssh.org
- ecdh-sha2-nistp256
- ecdh-sha2-nistp384
- ecdh-sha2-nistp521
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group14-sha1

jsch版本为 0.29支持的算法为

jsch因为这0.29为十年前的版本了,对应支持的算法为

Where as JSch claims to support these algorithms for key exchange:
- diffie-hellman-group-exchange-sha1
- diffie-hellman-group1-sha1

问题解决

该问题解决还是两种方法:
1、客户端升级jsch版本,升级完后及可支持新版本ssh
2、服务端向下兼容低版本的算法

解决方式一

直接下载最新版本的jsch的jar包进行替换即可。

这种方式对于技术来说应该是首选的了,但这十年的老代码本该淘汰,实在是没人敢动他,所以我们没有采用方式一。

解决方式二

服务端向下兼容低版本的算法,这就是直接修改ssh的配置文件

在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

注意:

  1. 对应的算法必须包含客户端需要支持的算法
diffie-hellman-group-exchange-sha256,
diffie-hellman-group14-sha1,
diffie-hellman-group-exchange-sha1,
diffie-hellman-group1-sha1
  1. 配置完成后重启ssh服务
service sshd restart
systemctl restart sshd.service

该方法可以临时解决这个问题,但会导致漏扫提示存在漏洞。对于安全性要求高的,不建议使用。

解决方式三

降低ssh版本,让对应的客户端可以直接连上。因为在测试环境7.4的版本可以直接连接进行文件传输,所以生产采用的把8.5的版本降低为测试环境的7.4,生产与测试保持版本一致,避免还有其他环境方面的问题。

卸载ssh,重新安装7.4版本的ssh,重启ssh服务即可

其他补充

MACs算法配置

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96

其他可能导致该问题的情况

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

JSch连接SFTP Exception:Algorithm negotiation fail问题解决相关推荐

  1. 主机ssh升级到6.7以上版本后,使用jsch jar包ssh连接不上报Algorithm negotiation fail问题的解决办法

    文章目录 一. 解决方案 1. 添加加密算法 2. 升级版本 3. 回退版本 4. j2ssh.jar方式替代jsch 5. jsch版本下载列表 一. 解决方案 1. 添加加密算法 ssh连接问题是 ...

  2. jsch jar包连接不上ssh报Algorithm negotiation fail 错误

    1.jsch jar包连接不上ssh报Algorithm negotiation fail 错误 1 com.jcraft.jsch.JSchException: Algorithm negotiat ...

  3. Algorithm negotiation fail解决

    Algorithm negotiation fail 是JDk1.8的Strong encrytion的问题 具体方法见readme  --本人将解决问题的方式提供下载(http://download ...

  4. java使用jsch连接sftp报permission denied问题

    在生产环境上,使用jsch的sftp.get(filepath,byteArrayOutputStream)时,报出了以下错误 因为是用其他账号登录,所以没有文件权限.

  5. 关于使用JSch连接sftp服务器引发的异常

    异常信息: com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Readat c ...

  6. 连接Ubuntu 出现 Algorithm Negotiation failed 错误

    以下方法在最新的Ubuntu 20.04验证成功: sudo vim /etc/ssh/sshd_config 增加以下两行: KexAlgorithms +diffie-hellman-group1 ...

  7. Ubuntu16.04连接SSH出现 Server responded “Algorithm negotiation failed” 的解决方法

    Ubuntu16.04连接SSH出现 Server responded "Algorithm negotiation failed" 的解决方法 参考文章: (1)Ubuntu16 ...

  8. java jsch_java使用JSCH实现SFTP文件管理

    本文实例为大家分享了java使用JSCH实现SFTP文件管理的具体代码,供大家参考,具体内容如下 一.连接配置 1.在项目中导入jsch-0.1.51.jar包: 2.创建SFTP类,存放连接属性,其 ...

  9. java连接sftp工具类

    本工具类支持远程连接sftp,上传下载文件 需要用到是jar是jsch-0.1.29.jar import java.io.BufferedReader;import java.io.File;imp ...

  10. java jsch api_详解Java使用Jsch与sftp服务器实现

    在实际项目中常会遇到需要连接服务器获取文件的场景,如账务系统需要通过连接行方的sftp服务器拉取回单文件.本文将主要讨论使用Java中的jsch与sftp服务器实现ssh免密连接. 一.什么是SFTP ...

最新文章

  1. 你的微博也被盗赞?试试HSTS强制HTTPS加密
  2. 用python画常密度轮廓线,如何使用Matplotlib在极坐标中绘制具有等高线密度线的散点图?...
  3. 发布dotNetCore程序到Kubernetes
  4. 每日一笑 | 男朋友整天沉迷游戏怎么办...?
  5. 牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修
  6. 带余除法(信息学奥赛一本通-T1009)
  7. 120天的努力,从牵引力教育开始逆袭的!
  8. MANIFEST.MF
  9. python网络爬虫笔记(九)
  10. python自动化办公入门书籍-Python自动化办公实战教程2020最新带源码
  11. 137.只出现一次的数字II
  12. 图像匹配之归一化积相关灰度匹配
  13. 【动画消消乐】HTML+CSS 自定义加载动画 053
  14. libtorrent编译
  15. matlab 生成 gif
  16. 国赛数模2017B思路汇总第一部分(题目一)
  17. 计算机网络到底该怎么学?
  18. 福建闽北卫生学校计算机考试,★福建闽北卫生学校
  19. 022 Rust死灵书之污染
  20. 阿里巴巴张勇:双11正式全球化 指挥部移师北京

热门文章

  1. 工业互联网标识解析体系
  2. Python 实现Mac 屏幕截图
  3. 计算机信息安全相关文献,优秀计算机信息安全论文参考文献 计算机信息安全外文文献怎么找...
  4. LEBERT:Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter
  5. 计算机锁屏图片怎么设置方法,电脑锁屏照片怎么设置
  6. 如何录用有竞业限制协议的员工?
  7. 北京大学公开课《数据结构与算法Python版》
  8. Region和Available Zone的区别
  9. JS特效三:LightBox(轮播图+图片弹窗)
  10. javascript百度地图使用(根据地名定位、根据经纬度定位)