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

无法修改sshd文件时如何解决JSch算法协商失败问题

SFTP对接JSch算法协商失败解决方案

报错信息

com.jcraft.jsch.JSchException: Algorithm negotiation fail
    at com.jcraft.jsch.Session.receive_kexinit(Session.java:590)
    at com.jcraft.jsch.Session.connect(Session.java:320)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at com.cashfree.common.dexterreport.sftp.SftpClient.getSftpChannel(SftpClient.java:82)

问题约束

  • 常规修改服务端sshd_config开放兼容算法的方案不适用:业务部署在远程环境,且需要对接大量配置各异的外部客户端,无法逐个调整对端服务端配置
  • 已尝试升级原生JSch到0.1.55版本,运行环境为Java 11,问题未解决
  • 待验证方案包括mwiede提供的JSch修复分支、升级wagon ssh版本,需要确认方案可行性

落地可行方案

1. 优先替换为mwiede维护的JSch分支(推荐生产使用)

这个分支是原生JSch停更后,社区公认的生产级替代方案,安全性和健壮性有充分保障:

  • 完全兼容原生JSch所有API,替换时仅需修改依赖坐标,不需要调整任何业务代码,迁移成本极低
  • 默认内置全量新老版本SSH协议的密钥交换、加密、签名、MAC算法,连接时自动和对端协商匹配的算法,不需要修改服务端配置,可适配大量配置不同的外部SFTP服务端
  • 目前已经被Spring Integration、Apache Camel等多个主流开源项目的SFTP组件作为默认依赖,迭代维护流程公开透明,经过大规模生产环境验证

2. 间接依赖JSch场景同步升级wagon-ssh版本

如果项目是通过Maven Wagon组件间接引入JSch,直接修改JSch依赖版本不会生效:旧版本wagon-ssh会强制拉取老旧版本JSch,导致算法兼容问题。将wagon-ssh升级到2.12及以上版本即可,该版本默认依赖上述mwiede维护的JSch版本,升级后无需额外代码调整即可解决协商失败问题。

3. 临时应急方案(不推荐长期使用)

如果短期内无法替换依赖,可以在创建JSch Session对象前,手动配置全量兼容算法列表,覆盖JSch默认的算法配置。但该方案需要随着SSH算法的淘汰持续更新维护列表,长期使用成本高,仅适合临时排障使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:45:38