You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSch不支持指定KEX算法的问题及解决办法咨询

问题分析与解决方案

算法支持情况

JSch 0.1.55版本对您提到的密钥交换(KEX)算法的支持状态如下:

  • diffie-hellman-group1-sha1:原生支持,这也是您能正常建立连接的原因
  • diffie-hellman-group14-sha256:JSch 0.1.55仅支持该算法的SHA-1变体(diffie-hellman-group14-sha1),不支持SHA-256版本
  • curve25519-sha256@libssh.org、diffie-hellman-group16-sha512、diffie-hellman-group18-sha512:这些现代KEX算法在JSch 0.1.55中完全没有原生支持,这就是触发“Algorithm negotiation fail”错误的核心原因

可行解决办法

1. 升级JSch版本(优先推荐)

JSch后续版本逐步补全了对这些算法的支持:

  • 0.1.58版本新增curve25519-sha256@libssh.org支持
  • 0.1.59及以上版本添加了diffie-hellman-group14-sha256、diffie-hellman-group16-sha512、diffie-hellman-group18-sha512的支持

升级后,只需在代码中指定所需算法即可,示例代码:

JSch jsch = new JSch();
Session session = jsch.getSession("your-username", "sftp-host", 22);
// 指定要使用的KEX算法列表
session.setConfig("kex", "curve25519-sha256@libssh.org,diffie-hellman-group18-sha512,diffie-hellman-group16-sha512,diffie-hellman-group14-sha256");
session.setPassword("your-password");
// 生产环境建议将StrictHostKeyChecking设为"yes"以保障安全
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

2. 自定义扩展KEX算法(适合无法升级版本的场景)

如果受限于环境无法升级JSch,可自行实现对应KEX算法的com.jcraft.jsch.Kex接口,再注册到JSch中:

  • 编写自定义算法类,实现Kex接口的所有方法,遵循SSH密钥交换协议规范
  • 通过JSch.setConfig("kex.{算法全名}", "自定义类的完整包路径")完成注册
  • 在会话配置中指定该算法

这种方式需要对SSH协议有较深入的理解,维护成本较高,仅作为备选方案。

3. 调整Bitvise服务器配置(临时应急方案)

若无法修改客户端代码或升级JSch,可在Bitvise SFTP服务器端启用JSch 0.1.55支持的KEX算法(如diffie-hellman-group1-sha1、diffie-hellman-group14-sha1),但此方案会降低连接的安全性,仅建议作为临时应急手段。

内容的提问来源于stack exchange,提问作者Hardik Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:25:31