如何在 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 會話並及時斷開空閒或非活動會話至關重要。