管理 Linux 伺服器時,常遇到使用者因斷網、VPN 斷線或終端機異常關閉,導致 SSH 登入 session 殘留在系統中(顯示 who 仍在線),佔用資源甚至造成帳號鎖定。本文介紹如何快速查詢並強制登出這些「殭屍」連線。
who
輸出範例:
root pts/1 2014-06-04 12:07 (27.115.*.*)
root pts/2 2014-06-04 13:31 (58.247.*.*)
root pts/3 2014-06-04 13:42 (58.246.*.*)
root pts/4 2014-06-04 13:56 (140.207.*.*)
root pts/5 2014-06-04 14:01 (140.207.*.*)
關鍵欄位:終端機代號(pts/1 ~ pts/5)與來源 IP,用於識別要踢除的 session。
# 語法:pkill -kill -t 終端機代號
pkill -kill -t pts/1
此指令會向該終端機發送 SIGKILL(-9),強制終止其上所有進程,使用者即被登出。
skill 或 kill 配合 PID# 找出該終端機的 shell PID
ps -ft pts/1
# 直接殺掉 shell 進程(通常是 bash)
kill -9
pkill -t 較為直觀,適合快速處理;若需更精細控制(如只踢掉特定使用者的特定 session),可配合 ps 篩選後再 kill。
可寫入 /etc/profile 或 /etc/ssh/sshd_config 設定自動斷線:
# sshd_config
ClientAliveInterval 300
ClientAliveCountMax 2
# 300 秒無回應,嘗試 2 次後斷線(共 10 分鐘)
或在 shell 設定 TMOUT=600(10 分鐘無操作自動登出)。
tty7、:0 等),同樣適用 pkill -t。善用 who + pkill -t 組合,能讓您輕鬆維護伺服器登入秩序,釋放被佔用的授權與資源。