JSch, connection is closed by foreign host

1. 问题

多线程连接SFTP时, 程序抛出异常

com.jcraft.jsch.JSchException: connection is closed by foreign host
	at com.jcraft.jsch.Session.connect(Session.java:269)
	at com.jcraft.jsch.Session.connect(Session.java:183)

2. 分析

单线程连接正常, 多线程异常, 连接数的变化导致SFTP不同反应, 猜测是sshd对连接有限制

查看sshd手册man sshd_config

  • MaxSessions, 多路复用, 一个tcp连接支持的最大会话数(ssh, sftp等)
  • MaxStartups, 登录窗口期内, 最大并发连接请求

MaxStartups默认为10:30:100, 表示并发连接超过10以后, 概率性(30%线程递增, 并发数达到60后概率为100%)的拒绝新连接

MaxSessions
	Specifies the maximum number of open sessions 
	permitted per network connection.  The default is 10.

MaxStartups
	Specifies the maximum number of concurrent unauthenticated 
	connections to the SSH daemon.  
	Additional connections will be dropped until authentication 
	succeeds or the LoginGraceTime expires for a connection.  
	The default is 10:30:100.

	Alternatively, random early drop can be enabled by 
	specifying the three colon separated values “start:rate:full”
	(e.g. "10:30:60").  
	sshd(8) will refuse connection attempts with a probability 
	of “rate/100” (30%) if there are currently “start”(10) 
	unauthenticated connections.  The probability increases 
	linearly and all connection attempts are refused if the 
	number of unauthenticated connections reaches “full” (60).

LoginGraceTime
	The server disconnects after this time if the user has not 
	successfully logged in.  If the value is 0, there is no 
	time limit.  The default is 120 seconds.

3. 方案

修改MaxStartups参数 (start初始值>=并发数), 并重启sshd服务

MaxStartups 100:30:200
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值