介紹如何在 Linux 系統上強制指定的使用者登出系統,以及傳送訊息通知對方的方法。
若要查詢 Linux 系統上登入中的使用者,可以使用 w
、who
或 users
等指令,詳細的說明可參考 Linux 查看目前登入系統的使用者教學與範例。
若要強制使用者登出,除了使用者名稱之外,還必須知道使用者登入的行程 ID(process ID),這個資訊可以透過 who
指令搭配 -u
參數來查詢:
# 查詢使用者與登入行程 ID who -u
ubuntu pts/0 2021-04-17 08:34 00:01 26541 (42.74.241.196) office pts/1 2021-04-17 08:35 . 26829 (42.74.241.196)
以 ubuntu
這個使用者來說,其登入的行程 ID 就是 26541
,只要終止這一個行程,該使用者就會被強制登出。
只要知道使用者登入的行程 ID,將該行程砍掉(kill)之後,就可以強制使用者登出系統:
# 終止指定行程 ID 為 26541 的行程 sudo kill -HUP 26541
終止使用者登入的行程之後,再以 who
查詢一次目前登入的使用者:
# 查詢使用者與登入行程 ID who -u
office pts/1 2021-04-17 08:35 . 26829 (42.74.241.196)
如果使用上面的 SIGNHUP
方式沒辦法終止使用者登入的行程,在沒辦法的狀況下,可以使用應強硬的 SIGKILL
方式:
# 終止指定行程 ID 為 26541 的行程(強硬方式) sudo kill -KILL 26541
這種強制登出使用者的方法是針對指定使用者與對應的 session,也就是說如果一位使用者重複以 SSH 登入,建立多條連線的 session,使用 kill
強制登出使用者時,只會將對應的登入 session 砍掉,其他的 session 並不影響。
當我們建立的 SSH 連線因為網路問題斷線時,若伺服器這邊還處於連線狀態,就可以使用這樣的方式將指定的 SSH 連線 session 刪除。
如果想要在強制使用者登出之前,通知該使用者盡速結束目前的工作,可以使用 write
指令,並指定使用者名稱以及登入的終端設備:
# 傳送訊息給 office 使用者位於 pts/2 終端設備登入的 session echo "Your session will end in 2 minutes. Save your work!" | write office pts/2
在這行指令執行之後,office
使用者就會收到類似這樣的訊息:
Message from ubuntu@yourhost on pts/0 at 10:18 ... Your session will end in 2 minutes. Save your work! EOF