使用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
相关产品推荐
相关产品推荐

