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

JSch连接远程服务器报错End of IO Stream Read求助

解决JSch发送SSH_MSG_KEX_ECDH_INIT后断开的问题

排查与修复步骤

  • 确认服务器KEX算法支持
    登录远程服务器执行ssh -Q kex,查看服务器实际支持的密钥交换算法列表。如果ecdh-sha2-nistp256不在其中,指定该算法无效,需替换为服务器支持的类型(比如diffie-hellman-group-exchange-sha256)。

  • 同步配置加密套件组合
    单独指定KEX可能不足以完成握手,需同时匹配加密、MAC算法。在代码中补充配置:

    session.setConfig("kex", "diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256");
    session.setConfig("cipher.s2c", "aes128-ctr,aes192-ctr,aes256-ctr");
    session.setConfig("cipher.c2s", "aes128-ctr,aes192-ctr,aes256-ctr");
    session.setConfig("mac.s2c", "hmac-sha2-256,hmac-sha1");
    session.setConfig("mac.c2s", "hmac-sha2-256,hmac-sha1");
    

    优先选用服务器已开启的套件,避免算法不匹配导致握手中断。

  • 临时关闭HostKey检查(仅测试用)
    HostKey验证失败可能伪装成IO断开,可临时关闭检查排除该因素:

    session.setConfig("StrictHostKeyChecking", "no");
    

    注意:生产环境需配置正确的HostKey,不要保持该设置。

  • 升级JSch版本
    旧版JSch存在ECDH握手相关兼容性bug,建议升级到最新稳定版(如0.1.55及以上),多数握手异常已在新版本中修复。

  • 检查服务器SSH配置
    远程服务器端查看/etc/ssh/sshd_config:

    • 确认KexAlgorithms未禁用你使用的算法
    • 将LogLevel设为VERBOSE,查看/var/log/auth.log(或对应系统日志),里面会记录握手失败的具体原因(如算法不支持、密钥长度不符合要求等)。

调试技巧

  • 开启JSch DEBUG日志,获取握手细节:
    JSch.setLogger(new Logger() {
        @Override
        public boolean isEnabled(int level) {
            return true;
        }
    
        @Override
        public void log(int level, String message) {
            System.out.println(message);
        }
    });
    
    日志会显示服务器返回的KEX算法列表,可快速对比定位不兼容项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:11