如何在 Linux 中断开非活动或空闲的 SSH 连接?
介绍
Secure Shell 或 SSH 是一种支持两个系统之间安全通信的协议。在Linux中,SSH广泛用于远程访问和管理服务器。该工具在客户端和服务器之间建立安全连接,对传输的信息进行加密,使其不会被未经授权的实体拦截。
在 Linux 中,当用户通过命令行界面登录到远程计算机时,会创建 SSH 连接。用户可以在远程主机上执行命令,就像这些命令实际存在于该计算机上一样。这样,系统管理员和网络工程师就可以从单个终端或工作站管理多台机器,而无需不断切换设备。
识别不活动或空闲的 SSH 连接
在断开不活动或空闲的 SSH 连接之前,首先识别它们非常重要。在 Linux 中,有多个命令可用于列出活动用户及其会话、显示有关登录用户及其进程的信息以及查看先前登录和会话的日志。
使用“who”命令列出活动用户及其会话
“who”命令用于显示当前登录用户的列表及其登录名、终端线路号 (tty)、登录时间以及远程主机名或 IP 地址。要专门仅查看 SSH 连接,可以在命令中添加“-u”选项。这将仅显示活动的 SSH 连接以及相应的用户信息。
who -u
使用“w”命令显示有关登录用户及其进程的信息
“w”命令提供有关所有登录用户的详细信息,包括他们在系统上执行的操作。输出包括用户名、终端号、远程主机地址、登录时间以及每个用户下运行的进程的列。只需在终端上输入“w”即可为您提供通过任何方式(包括 ssh 、控制台、GUI 等)连接到您的系统的每个人的所有详细信息。
使用“last”命令查看以前的登录和会话日志
“last”命令显示所有以前登录的用户的列表,按最新的顺序排列。它还显示他们上次从哪个位置/终端/IP 登录的时间。 “最后”提供的另一项重要信息是是否存在任何意外终止,例如电源故障或网络中断等。
最后的
了解用于识别不活动或空闲 SSH 连接的各种命令对于维护安全高效的系统至关重要。
手动断开不活动或空闲的 SSH 连接
如果您已识别出不活动或空闲的 SSH 连接并想要手动终止它,可以使用多个命令来执行此操作。这些命令专门针对与 SSH 连接相关的进程,允许您结束它们而不影响系统上的任何其他进程。
使用“kill”命令终止特定会话 ID
“kill”命令用于向特定进程(或多个进程)发送信号以终止它们。当要断开非活动或空闲的 SSH 连接时,您可以使用“kill”以及与该特定连接关联的会话 ID。
要确定非活动或空闲 SSH 连接的会话 ID,您可以使用本文第二节中提到的任何方法。确定会话 ID 后,只需运行以下命令 -
kill [sessionID]
这将立即终止该特定 SSH 连接并注销与其关联的任何用户。
使用“pkill”命令终止与特定用户关联的所有进程
如果您想立即断开特定用户的所有非活动或空闲 SSH 连接,则可以使用“pkill”命令。该命令不仅向特定进程发送信号,而且还杀死所有其他相关进程。要终止某个特定用户的所有连接,请运行以下命令 -
pkill -U [username]
这将发送信号并结束 [用户名] 打开的所有 ssh 连接。
使用“skill”命令发送信号来终止特定进程
有时,使用kill或pkill方法可能会终止其他与活动会话相关的进程。确定哪些进程与活动 SSH 连接关联并不总是那么容易,因此您可以使用“skill”命令。 “skill”命令允许您按名称、用户或组来定位特定进程。
您可以使用它发送一个信号,该信号将终止与特定模式匹配的任何进程。要终止特定的 ssh 会话,请运行以下命令 -
技能 -KILL -u [用户名] --tty=[终端] 这将发送一个信号来结束指定终端上 [username] 打开的所有 ssh 连接。技能命令可以终止也在终端中运行的其他进程。
自动断开不活动或空闲的 SSH 连接
在本节中,我们将讨论在 Linux 中自动断开非活动或空闲 SSH 连接的两种方法:使用 cron 作业创建自动脚本和使用 sshd_config 文件设置自动断开连接。
使用 Cron 作业创建自动化脚本
Cron 是 Linux 中基于时间的作业调度程序,允许您通过调度任务以特定时间间隔运行来自动执行任务。要创建自动脚本来断开不活动或空闲的 SSH 连接,您可以使用我们之前讨论过的命令组合:“who”、“w”、“last”、“kill”和/或“skill”。
您可以编写一个简单的 Bash 脚本来检查非活动会话并自动终止它们。首先,打开终端并输入 -
$ crontab -e
此命令将以编辑模式打开 crontab 文件。然后在文件末尾添加以下行 -
* * * * * /path/to/script.sh
这告诉 cron 每分钟执行我们的脚本。接下来,通过输入创建一个新的 Bash 脚本 -
$ nano /path/to/script.sh
现在复制此代码并将其粘贴到文件中 -
#!/bin/bash
users=$(who | awk '{print $1}' | sort -u) for user in $users
do idle=$(w -h "$user" | awk '{print $5}')
if [[ "$idle" -gt "1800" ]]; then pkill -u "$user"
fi done
该脚本将每分钟检查空闲会话并终止空闲时间超过 30 分钟(1800 秒)的用户会话。您可以通过修改“if”语句中的数字来更改此阈值。
使用 sshd_config 文件设置自动断开连接
自动断开非活动 SSH 连接的另一种方法是修改 sshd_config 文件。该文件包含 SSH 服务器的配置设置,包括会话超时值。默认情况下,SSH 会话没有超时值,这意味着空闲会话将无限期保持打开状态。
设置会话超时值 -
打开你的终端并输入 -
$ sudo nano /etc/ssh/sshd_config
添加或修改以下行 -
ClientAliveInterval 300 ClientAliveCountMax 2
上述配置将会话超时值设置为五分钟(300 秒)。 “ClientAliveCountMax”选项指定服务器在终止非活动会话之前应向客户端发送保持活动消息的次数。
使用 CTRL+X、Y、ENTER 保存并关闭文件。
使用以下命令重新启动 SSH 服务 -
$ sudo systemctl restart sshd.service
此配置将确保非活动会话在五分钟后终止。如果在此期间没有活动,服务器将在终止非活动会话之前向客户端发送两次保活消息。自动断开不活动或空闲的 SSH 连接对于维护系统安全和性能至关重要。
结论
正如我们所见,空闲或不活动的 SSH 连接可能会给您的 Linux 服务器带来安全风险。如果这些连接无人看管,攻击者可能会控制休眠会话并获得对您的系统的未经授权的访问。因此,跟踪活动的 SSH 会话并及时断开空闲或不活动的会话至关重要。