监控SSH数据传输,如果没有数据流动则关闭连接

监控SSH数据传输,如果没有数据流动则关闭连接

对于文件传输和手动存储,我们有一个简单的 RHEL 服务器,所有其他 Linux 客户端都通过 SSH 连接。

每当任何客户端想要访问/存储数据时,它们都会通过连接到服务器,nautilus并且即使数据传输停止,连接也会保持建立,直到手动卸载或客户端关闭其系统。

当我监控服务器上的CPU使用率时,大部分CPU使用率都是由于这些已建立的连接造成的。

[root@server]# top

top - 11:22:13 up  2:36,  6 users,  load average: 2.79, 2.19, 1.90

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
17247 share     20   0 55640 1924  972 S 26.7  0.1   7:36.72 sftp-server                                                                                                                                                                     
17900 share     20   0 55640 1932  972 S 17.5  0.1  10:16.45 sftp-server                                                                                                                                                                     
26152 share     20   0 55596 1872  972 S 17.5  0.1   8:12.04 sftp-server                                                                                                                                                                     
17487 share     20   0 55636 1864  972 R 15.5  0.1   9:58.56 sftp-server                                                                                                                                                                     
 2852 root      20   0  195m  55m 7872 R 13.8  2.7  17:01.72 X                                                                                                                                                                               
11768 share     20   0 55560 1684  832 S  8.9  0.1   3:12.00 sftp-server                                                                                                                                                                     
17486 share     20   0 98172 1884  784 R  8.2  0.1   4:48.35 sshd                                                                                                                                                                            
26151 share     20   0 98236 1872  784 S  7.9  0.1   4:03.29 sshd                                                                                                                                                                            
17899 share     20   0 98204 1916  784 S  7.2  0.1   5:00.17 sshd                                                                                                                                                                            
12569 tejas     20   0  322m  11m 7808 S  5.9  0.6   0:28.12 gnome-system-mo                                                                                                                                                                 
17246 share     20   0 98204 1840  784 S  5.9  0.1   3:33.18 sshd                                                                                                                                                                            
11767 share     20   0 98008 1716  772 S  4.3  0.1   1:28.73 sshd                                                                                                                                                                            
15168 tejas     20   0  989m  64m  18m S  0.7  3.2   0:01.31 chrome                                                                                                                                                                          
 4077 tejas     20   0  109m 9312 5584 S  0.3  0.5  24:26.08 App                                                                                                                                                                             
11360 tejas     20   0  304m  10m 5144 S  0.3  0.5   0:05.23 gnome-terminal                                                                                                                                                                  
14236 root      20   0 15168 1380  928 R  0.3  0.1   0:00.36 top                                                                                                                                                                             
    1 root      20   0 19324 1056  844 S  0.0  0.1   0:00.67 init                                                                                                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                        

因此,我正在寻找一种自动方法来卸载该 ssh 连接(如果没有数据流动,例如 10 分钟左右),或者任何其他想法来最大限度地减少 CPU 使用率。
编辑:在 slm 的评论之后,can you explain how they're connecting from Nautilus?
这是客户端通常如何通过 SSH 连接到服务器的方式。

  • 输入必填字段并输入密码:

在此输入图像描述

在此输入图像描述

  • 传输/创建文件。

在此输入图像描述

  • 关闭目录后等待 30 分钟。
  • 仍然显示连接...

在此输入图像描述

答案1

方法 #1 - 通过 SSHD/SFTPD 使用超时

如果通过 SSH 连接,您可以在 SSHD 端的配置文件中设置这些设置/etc/ssh/sshd_config

ClientAliveInterval 30
ClientAliveCountMax 5

这些设置起作用的地方:

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

  • ClientAliveCountMax:设置客户端活动消息的数量 (5),在 sshd 不接收客户端返回的任何消息的情况下可以发送该数量。如果在发送客户端活动消息时达到此阈值,sshd 将断开客户端连接,终止会话。

要获得 10 分钟,您需要相应地调整时间,也许像这样:

ClientAliveInterval 120
ClientAliveCountMax 5

方法#2 - 使用刀具

如果上述方法不起作用,那么客户端完全有可能正在利用保持活动状态,人为地支撑低流量连接。如果这是您的情况,那么您可以采取哪些操作来断开这些空闲连接。

一种方法是开发一个 cronjob 来监视在特定时间段内空闲的连接,例如在您的场景中为 10 分钟。

一旦此脚本检测到这些连接之一,您就可以使用诸如cutter告诉客户端断开连接之类的命令,这违背了客户端的意愿。

$ cutter <ip> <port>

例子

$ cutter 192.168.1.20 22

笔记:Cutter 应该位于大多数主要发行版的存储库中。我能够以这种方式将它安装在 Fedora/CentOS/RHEL 以及 Debian/Ubuntu 上。

调试连接

@Gilles 在您的 Q 下的评论中提出了一个很好的观点,即空闲连接实际上不应该导致任何 CPU 负载。事实上,所有这些sftp-server进程都导致了我认为的显着负载(20-30%),这top似乎表明正在发生某些事情。

首先,我将使用strace并连接到其中一个sftp-server进程来查看它的用途。例如连接到 PID 17247:

$ sudo strace -p 17247

看看它是否真的在做任何事情。确实不应该这样。您还可以使用tcpdumpwireshark来监视 Nautilus 和 Nautilus 之间来回的网络流量sftp-server

参考

相关内容