如何在 Linux 中断开非活动或空闲的 SSH 连接?
简介
安全外壳或 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 登录。'last' 提供的另一个重要信息是是否存在任何意外终止,例如电源故障或网络中断等。
last
了解用于识别非活动或空闲 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 会话,请运行此命令:
skill -KILL -u [用户名] --tty=[终端] 这将发送一个信号以结束由 [用户名] 在指定终端上打开的所有 ssh 连接。skill 命令也可能终止在终端中运行的其他进程。
自动断开非活动或空闲的 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 会话并及时断开空闲或非活动会话至关重要。