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

使用j2ssh连接SSH报错TransportProtocolException的问题排查

解决j2ssh-core-0.2.9密钥交换算法不兼容问题

我之前踩过j2ssh-core-0.2.9这个老库的坑,正好碰到过密钥交换算法不匹配的问题,给你两个实用的解决方向:

方向一:临时调整SSH服务器配置,兼容旧算法

如果你的服务器允许修改配置,可以先临时开启客户端支持的过时算法,让连接先跑起来:

  1. 打开SSH服务器的配置文件(通常是/etc/ssh/sshd_config)
  2. 添加或修改KexAlgorithms配置项,把客户端仅支持的diffie-hellman-group1-sha1追加到服务器的算法列表里:
    KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
    
  3. 重启SSH服务(比如执行systemctl restart sshd或者service ssh restart,根据你的操作系统而定)
  4. 再尝试用j2ssh连接,应该就能匹配到可用的密钥交换算法了

注意:这只是临时的权宜之计,diffie-hellman-group1-sha1是安全性较低的过时算法,长期使用会有风险,不建议一直开启。

方向二:升级/替换老旧的j2ssh库

j2ssh-core-0.2.9是2006年左右的版本,已经停止维护十几年了,根本不支持任何现代的密钥交换算法,最彻底的解决办法是换用活跃维护的SSH客户端库:

  • 推荐JSch:这是一款维护周期很长的SSH库,支持绝大多数现代SSH算法,上手成本也低
  • 或者Apache MINA SSHD:Apache旗下的活跃项目,功能齐全,支持最新的SSH协议特性

给你贴个简单的JSch连接示例,用来替代j2ssh的逻辑:

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class SSHDemo {
    public static void main(String[] args) {
        JSch jsch = new JSch();
        try {
            Session session = jsch.getSession("你的用户名", "服务器地址", 22);
            session.setPassword("你的密码");
            // 生产环境建议配置已知主机密钥,这里为了测试跳过验证
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            System.out.println("连接成功!");
            session.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

补充说明

你用ssh -Q kex查看服务器支持算法的方法很对,能快速定位客户端和服务器的算法交集。但j2ssh这个旧版本的局限性实在太大,没有适配新算法的可能,所以长远来看替换库才是最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:47