如何断开空闲的 SFTP 用户?

如何断开空闲的 SFTP 用户?

我有一个 SFTP 服务器,客户端每分钟都会连接一次以交换文件。一些客户端连接后不断开连接,导致一段时间内出现大量连接。这会堵塞 CPU。我在 sshd_config 中设置了 ClientAliveInterval 和 ClientAliveCountMax,这会在一段时间后断开空闲的 ssh 连接,但 id 似乎不会断开空闲的 sftp 连接。如何强制断开空闲的 sftp 连接?

答案1

一步一步尝试:

pstree -p—— 将显示整个流程树。

w- 谁在做什么。 - 这可能不是必要的(或者也许您可以获得用户的空闲时间。)

ps aux| grep sshd

尝试获取 sshd 会话的进程 ID,它是 sftp 服务器的父进程。您可以从中获取用户的 sftp 进程 ID ps aux | grep sshd,然后终止其父进程:

附言输出将会像这样:

root@server:/# ps aux | grep ssh
root      3531  0.0  0.0   5312  1012 ?        Ss   Jan02   0:00 /usr/sbin/sshd
root     24034  0.0  0.1   8052  2412 ?        Ss   13:24   0:00 sshd: metin [priv]
metin    24039  0.0  0.0   8052  1500 ?        S    13:24   0:00 sshd: metin@notty
metin    24042  0.0  0.0   4568  1240 ?        Ss   13:24   0:00 /usr/lib/openssh/sftp-server
root     24043  0.0  0.1   8052  2632 ?        Ss   13:24   0:00 sshd: metin [priv]
metin    24048  0.0  0.0   8052  1532 ?        S    13:24   0:00 sshd: metin@pts/0
root     24109  0.0  0.0   3000   748 pts/0    R+   13:26   0:00 grep ssh

pstree-p输出将会像这样:

init(1)─┬─apache2(4012)─┬─apache2(23627)
        │               ├─apache2(23846)
        │               ├─apache2(23913)
        │               ├─apache2(23998)
        │               ├─apache2(24000)
        │               ├─apache2(24025)
        │               ├─apache2(24028)
        │               ├─apache2(24073)
        │               ├─apache2(24074)
        │               └─apache2(24075)
        ├─console-kit-dae(25820)
        ├─courierlogger(3719)───authdaemond(3720)─┬─authdaemond(3734)
        │                                         ├─authdaemond(3736)
        │                                         ├─authdaemond(3738)
        │                                         ├─authdaemond(3740)
        │                                         └─authdaemond(3741)
        ├─courierlogger(3744)───couriertcpd(3745)
        ├─courierlogger(3768)───couriertcpd(3769)
        ├─courierlogger(3786)───couriertcpd(3787)
        ├─courierlogger(3810)───couriertcpd(3811)
        ├─cron(3991)
        ├─dbus-daemon(3475)
        ├─dd(3451)
        ├─getty(4038)
        ├─klogd(3454)
        ├─master(3882)─┬─pickup(23992)
        │              ├─qmgr(3885)
        │              └─tlsmgr(4144)
        ├─mysqld_safe(3591)─┬─logger(3635)
        │                   └─mysqld(3633)─┬─{mysqld}(3637)
        │                                  ├─{mysqld}(3638)
        │                                  ├─{mysqld}(3639)
        │                                  ├─{mysqld}(3640)
        │                                  ├─{mysqld}(3642)
        │                                  ├─{mysqld}(3643)
        │                                  ├─{mysqld}(3644)
        │                                  ├─{mysqld}(3655)
        │                                  ├─{mysqld}(861)
        │                                  ├─{mysqld}(17322)
        │                                  ├─{mysqld}(18125)
        │                                  ├─{mysqld}(18872)
        │                                  ├─{mysqld}(21229)
        │                                  ├─{mysqld}(23352)
        │                                  ├─{mysqld}(23353)
        │                                  └─{mysqld}(23370)
        ├─named(3502)─┬─{named}(3504)
        │             ├─{named}(3505)
        │             └─{named}(3506)
        ├─ntpd(3106)
        ├─saslauthd(3912)─┬─saslauthd(3913)
        │                 ├─saslauthd(3914)
        │                 ├─saslauthd(3915)
        │                 └─saslauthd(3916)
        ├─sshd(3531)─┬─sshd(24034)───sshd(24039)───sftp-server(24042)
        │          ├─sshd(24043)───sshd(24048)───bash(24050)───su(24077)───bash(24078)───ps+
        │            └─sshd(24094)───sshd(24099)───sftp-server(24101)
        ├─syslogd(3429)
        ├─udevd(2216)
        └─vsftpd(3932)

您将要执行此操作kill 24034,因为它是进程用户“metin”的父 sshd 会话,一直用作进程 24042(请查看ps上面的输出)。

并且您还可以从输出中获取它们的状态(空闲,睡眠,活动等)ps

如果您想自动执行此操作,我不知道有任何软件可以做到这一点,但您可以编写自己的脚本。

相关内容