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

使用Jsch连接AWS Transfer Family SFTP服务器时连接断开

解决Jsch连接AWS Transfer Family SFTP时的java.io.IOException: End of IO Stream Read错误

结合Mac自带SFTP客户端能正常连接的情况,问题大概率出在Jsch默认配置与AWS Transfer Family的要求不匹配上,试试下面的解决方案:

1. 匹配AWS Transfer Family的加密算法配置

AWS Transfer Family对加密、密钥交换算法有特定要求,Jsch默认算法集可能和服务器不兼容,导致连接中断。在session.connect()前添加以下配置:

JSch jsch = new JSch();
Session session = jsch.getSession("你的用户名", "SFTP服务器端点", 22);

// 设置认证信息(密码或密钥二选一)
session.setPassword("你的密码");
// 密钥认证的话用:jsch.addIdentity("本地私钥文件路径");

// 配置兼容AWS的算法
session.setConfig("kex", "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256");
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-sha2-512");
session.setConfig("mac.c2s", "hmac-sha2-256,hmac-sha2-512");

// 测试阶段临时禁用主机密钥检查(生产环境建议手动配置可信主机密钥)
session.setConfig("StrictHostKeyChecking", "no");

session.connect();

// 明确打开SFTP通道
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();

// 后续上传逻辑...

2. 验证认证方式正确性

  • 若用SSH密钥认证,确保私钥是AWS支持的PEM格式,避免使用PuTTY生成的PPK格式;
  • 若用密码认证,确认用户名、密码无特殊字符转义问题,且权限配置正确。

3. 升级Jsch版本

尝试将Jsch升级到最新稳定版(如0.2.15),新版本修复了部分兼容性bug,可能解决与AWS Transfer Family的适配问题。

4. 排查网络权限

确认Java进程未被Mac防火墙、隐私设置拦截——Mac客户端能连说明网络通路正常,但Java程序的联网权限可能受限,可在系统设置中检查并开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:20:13