JSch

关注
义项:Java SSH2实现库
JSch

JSch(Java Secure Channel)是纯 Java 实现的 SSH2 协议库,由 JCraft 开发并采用 BSD 风格许可证发布。它使 Java 程序能够连接 sshd 服务器,实现端口转发、X11 转发、文件传输等功能,并可把 SSH 能力集成进自有程序。JCraft 的最后一版为 0.1.55,此后活跃开发转移到社区分支 mwiede/jsch。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

JSch 是一个以纯 Java 语言实现的 SSH2 协议库,全称 Java Secure Channel,由 JCraft 开发并以 BSD 风格许可证发布[1]。它的用途是让 Java 程序作为客户端连接运行 sshd 的服务器,并在程序内部调用 SSH 的各类功能[1]。

由于 SSH 本身负责加密、认证与数据压缩,JSch 为 Java 生态提供了一条在应用层使用安全远程通道的途径,常被构建工具、文件传输组件和集成开发环境当作底层依赖[1]。

原理

JSch 工作于 SSH2 协议之上。SSH 协议存在 SSH1 与 SSH2 两个互不兼容的版本,SSH2 是为规避当时 RSA 专利问题、修正 SSH1 的数据完整性缺陷等技术原因而设计的,并由 IETF 的 Secure Shell 工作组标准化[1]。JSch 只实现 SSH2 一侧的客户端行为[1]。

一次典型会话包含协议版本交换、密钥交换与算法协商、用户认证、通道建立等环节。JSch 支持的密钥交换算法包括 diffie-hellman-group-exchange-sha1、diffie-hellman-group1-sha1、diffie-hellman-group14-sha1、diffie-hellman-group-exchange-sha256 以及基于椭圆曲线的 ecdh-sha2-nistp256、ecdh-sha2-nistp384、ecdh-sha2-nistp521[1]。

在对称加密方面,可选算法有 blowfish-cbc、3des-cbc、aes128-cbc、aes192-cbc、aes256-cbc、aes128-ctr、aes192-ctr、aes256-ctr、3des-ctr、arcfour、arcfour128、arcfour256;消息认证码支持 hmac-md5、hmac-sha1、hmac-md5-96、hmac-sha1-96;主机密钥类型支持 ssh-dss、ssh-rsa 以及多种 ecdsa-sha2 曲线[1]。用户认证方式覆盖公钥(DSA、RSA、ECDSA)、口令、键盘交互以及 gssapi-with-mic[1]。

库本身以纯 Java 编写,但依赖 Java 密码学扩展(JCE)。在 J2SE 1.4.0 及更高版本上无需额外库即可使用,较早的 J2SE 1.2.2、1.3 则需要配合 Bouncy Castle 或 Sun 的 JCE 实现[1]。

发展历程

JCraft 开发 JSch 的初始动机,是让自家纯 Java 的 X 服务器 WiredX 的用户能够使用安全的 X 会话,因此早期工作主要围绕用 SSH2 协议实现 X11 转发,之后才逐步加入端口转发、文件传输、终端仿真等功能[1]。

JSch 的 0.1.55 版是 JCraft 发布的最后一个版本,发布于 2018 年 11 月 26 日[2]。此后 JCraft 一侧不再更新,官方站点说明活跃开发已在社区分支 mwiede/jsch 上继续[1]。

社区分支由 Matthias Wiede 发起,以 com.github.mwiede:jsch 为坐标发布,被描述为可近乎直接替换原库的替代品。该分支吸收了 Jzlib 的实现,去掉了对外部 jzlib 依赖的需要,并采用了更安全的默认设置[3]。

围绕是否迁移到分支,多个项目展开过讨论。Apache Commons VFS 提出把已停止维护的 jsch 0.1.54 换成分支 0.2.8[4];Apache MINA sshd 也把测试依赖切换到该分支[3];Debian 的 Java 维护者则讨论在新包中同时提供 com.jcraft:jsch 与 com.github.mwiede:jsch 两套 Maven 坐标以便过渡[5]。

应用

JSch 的常见用途是让 Java 程序连接 sshd 服务器,执行端口转发、X11 转发、文件传输等操作,并把功能嵌入自有程序。在文件传输方面,它实现了 SSH 文件传输协议(SFTP)的 0、1、2、3 版本[1]。

JCraft 官方列出的使用方包括 Ant 1.6 及更高版本[1]。此外,Apache Commons VFS 的 SFTP 支持、Apache MINA sshd 的测试代码、Maven Wagon 的 SSH 传输等也曾依赖或讨论依赖该库[4]。

在被集成的过程中,JSch 常以上游发行版软件包的形式分发,例如 Debian 的 libjsch-java、Fedora 与 CentOS 的 jsch 包,其描述均为「SSH2 协议的纯 Java 实现」[6]。

局限

JCraft 版本长期停止更新。0.1.55 发布于 2018 年 11 月 26 日之后,原上游再无新版本,因而未能跟上 SSH 协议与密码学实践的变化,有意见认为这可能带来潜在的安全问题[2][7]。

已有版本还存在协议实现细节上的偏差。例如在会话建立阶段的协议版本交换中,程序仅以 LF 结束,而标准要求 CR LF[4]。项目不提供公开源码仓库,开发过程不透明,这一点也受到下游使用者的批评。

迁移到社区分支并非完全没有代价。分支默认禁用了基于 SHA-1 的 RSA 签名,与 OpenSSH 8.8 之后的做法一致,因为 SHA-1 在密码学上已被视为不安全,这会导致依赖旧算法的连接在运行时出现行为变化[2]。

参见

  • SSH —— JSch 所实现的远程登录与安全通道协议。

  • Java —— JSch 所使用的编程语言与运行环境。

  • SFTP —— JSch 在文件传输方向实现的应用层协议。

  • X11 —— JSch 早期重点支持的图形转发场景。

  • Apache MINA sshd —— 同期可供 Java 项目选择的另一套 SSH 库。

参考资料

  1. JSch - Java Secure Channel [引用日期2026-10-14]
  2. github.com 上的网页 [引用日期2026-10-14]
  3. apache/mina-sshd/6b2a873751aa78154656951e6f70e8fdb794cf58 [引用日期2026-10-14]
  4. [SFTP] Replace abandoned jsch (0.1.54) with fork (0.2.8) [引用日期2026-10-14]
  5. debian.net 上的网页 [引用日期2026-10-14]
  6. rpminfo [引用日期2026-10-14]
  7. [java-sig-commits][Bug 2342851] New: upgrade jsch to 0.2.23 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:03:55Z

历史版本

本条目引用的词条
Java SSH2 IETF SSH SFTP X11 Apache MINA sshd