Ubuntu SSH连接不closures

我们有一个来自外部方的服务器连接。 此方使用sftplogin并上传一些文件。 会议不是由该方闭幕,他们不知道如何做到这一点(这是一个Windows服务器,显然他们使用的脚本不支持它)。

现在服务器上周因为内存不足而崩溃了。 经过一番search后,我发现有2500个SSH连接(有些是几个月前的)。 每一个只占用一点点内存,但是它们一起使服务器崩溃。 我杀了他们,现在它运行顺利。

我怎样才能防止这种情况再次发生? 我想让所有的会议在几个小时后被杀死。 这是可能从服务器端,或者我应该为自己创build一个脚本?

有很多关于SSH超时的文章,但是所有的解决scheme都是客户端的。

编辑:现在我已经创build了这个脚本,每晚运行:计数= $(ps aux | grep [USERNAME] | wc -l)echo“Found $ count processes”;

for i in $(seq $count) do echo "kill $i" kill -9 $(ps aux | grep [USERNAME] | grep -v grep | head -n 1 | tr -s ' ' | cut -f 2 -d ' ') done service ssh restart 

您需要将[USERNAME]replace为已login的用户。 它会杀死这个用户的所有进程,但在我的情况下,只有这个用户的SSH连接运行。

编辑您的SSH服务器的configuration文件以包含

 ClientAliveInterval 600 ClientAliveCountMax 0 

这将在10分钟(600秒)后断开所有闲置的客户端。

引用手册:

ClientAliveCountMax

设置可能在没有sshd的情况下发送的客户端活动消息的数量(见下文)(8)从客户端接收到任何消息。 如果在发送客户端活动消息时达到此阈值,则sshd将断开客户端,终止会话。 […]

默认值为3.如果ClientAliveInterval(见下文)设置为15,并且ClientAliveCountMax保留为默认值,则大约45秒后,无响应的SSH客户端将断开连接。 该选项仅适用于协议版本2。

ClientAliveInterval

设置以秒为单位的超时间隔,在此之后,如果没有从客户端收到数据,sshd(8)将通过encryption通道发送消息来请求客户端的响应。 默认值是0,表示这些消息不会被发送到客户端。 该选项仅适用于协议版本2。