求助:运行Java程序触发JSchException:connection is closed by foreign host
排查
com.jcraft.jsch.JSchException: connection is closed by foreign host 异常的方向 这个异常说明你的Java程序和Windows远程服务器的SSH连接被对方主动断开,结合你要实现文件传输的需求,按以下方向排查:
Windows服务器未开启SSH服务
JSch依赖SSH协议建立连接,Windows默认没有内置SSH服务(Windows 10/11需手动安装OpenSSH服务,旧版本需部署FreeSSHd这类第三方SSH服务)。先确认服务器上的SSH服务是否已安装并正常运行,先用Putty、Xshell这类普通SSH客户端尝试连接,排除基础连接问题。连接参数错误
- 检查主机IP/域名是否正确,先用
ping命令测试网络可达性 - 确认SSH端口是否匹配:默认是22,若服务器修改过端口,程序中必须指定对应端口
- Windows用户名格式要准确:本地账户用
机器名\用户名或直接用户名;域账户用域名\用户名,避免因认证格式错误被拒绝
- 检查主机IP/域名是否正确,先用
防火墙/安全组拦截
- Windows防火墙需放行SSH端口(默认22)的入站规则
- 客户端所在网络的防火墙需放行SSH端口的出站规则
- 若服务器在云平台,检查云安全组是否开放了对应SSH端口
SSH服务配置限制
- 检查SSH服务是否禁用了密码登录(若程序用密码认证),需在SSH配置文件中开启
PasswordAuthentication yes - 确认服务器的SSH服务是否限制了客户端IP访问,需将你的客户端IP加入允许列表
- 检查服务器的SSH服务是否有并发连接限制或会话超时设置,导致连接被强制断开
- 检查SSH服务是否禁用了密码登录(若程序用密码认证),需在SSH配置文件中开启
JSch代码实现问题
- 确认代码中是否设置了合理的连接超时(比如
session.setTimeout(30000)),避免因超时被断开 - 检查SFTP通道是否正确打开:需调用
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp")并执行channel.connect() - 若使用密钥认证,确认私钥路径、密钥密码(若有)是否正确,服务器是否已添加对应公钥
- 确认代码中是否设置了合理的连接超时(比如
内容的提问来源于stack exchange,提问作者Abdelilah El-Hadad
相关产品推荐
相关产品推荐

