如何在Linux上列出所有已連線的SSH會話


介紹

安全外殼協議 (SSH) 是一種常用協議,用於安全地遠端訪問 Linux 伺服器。當多個使用者透過 SSH 連線到 Linux 伺服器時,為了管理或監控目的,列出所有已連線的 SSH 會話可能很有用。在本文中,我們將討論如何使用各種命令列工具在Linux 上列出所有已連線的 SSH 會話

使用 who 命令列出已連線的 SSH 會話

who 命令是一個簡單且廣泛使用的命令列工具,用於列出登入到 Linux 系統的使用者。要列出所有已連線的 SSH 會話,可以使用“who -a” 命令。-a 選項顯示所有使用者,包括未透過系統控制檯登入的使用者。結果將顯示您的使用者名稱、終端以及登入日期和時間。

$ who -a
root     pts/0        2020-12-19 14:20 (10.0.0.1)
user1    pts/1        2020-12-19 15:25 (10.0.0.2)
user2    pts/2        2020-12-19 14:30 (10.0.0.3)

在此示例中,輸出顯示當前連線了三個使用者:“root”、“user1”和“user2”,以及他們連線到的端點和他們連線的 IP 地址。

使用 w 命令列出已連線的 SSH 會話

另一個可用於列出已連線 SSH 會話的命令列工具是“w”。此命令顯示當前登入到系統的使用者資訊,並顯示每個使用者正在執行的程序。要列出所有已連線的 SSH 會話,可以使用“w -h” 命令,該命令省略標題並僅顯示程序。

$ w -h
root     pts/0        14:20   2.00s  0.00s  ssh 10.0.0.1
user1    pts/1        14:25   1.00s  0.00s  ssh 10.0.0.2
user2    pts/2        14:30   1.00s  0.00s  ssh 10.0.0.3

在此示例中,輸出顯示當前連線了三個使用者,他們連線到的終端以及他們連線的 IP 地址。

使用 last 命令列出已連線的 SSH 會話

last 命令用於顯示最近登入到系統的使用者。此命令還可以使用最新的“-i”命令來列出已連線的 SSH 會話。

$ last -i
root     pts/0        10.0.0.1       Sun Dec 19 14:20 - 14:25  (00:05)
user1    pts/1        10.0.0.2       Sun Dec 19 14:25 - 14:30  (00:05)
user2    pts/2        10.0.0.3       Sun Dec 19 14:30 - 14:35  (00:05)

在此示例中,輸出顯示當前連線的三個使用者、他們連線到的端點、他們連線的 IP 地址以及他們的會話時長。

使用 who -u 命令列出已連線的 SSH 會話

您還可以使用“who -u” 命令列出所有已連線的 SSH 會話。此命令顯示使用者、終端以及登入日期和時間。

$ who -u
root     pts/0        2020-12-19 14:20 (10.0.0.1)
user1    pts/1        2020-12-19 14:25 (10.0.0.2)
user2    pts/2        2020-12-19 14:30 (10.0.0.3)

“-u” 選項顯示使用者及其空閒時間,但不顯示 IP 地址。因此,如果 IP 資訊對您很重要,您可以將此命令與“-i” 選項結合使用,這將顯示 IP 地址。

$ who -u -i
root     pts/0        2020-12-19 14:20 (10.0.0.1) . . . . . . . . . . . . . . . 
user1    pts/1        2020-12-19 14:25 (10.0.0.2) . . . . . . . . . . . . . . . 
user2    pts/2        2020-12-19 14:30 (10.0.0.3) . . . . . . . . . . . . . . .

使用 ss 命令列出已連線的 SSH 會話

另一個可用於列出已連線 SSH 會話的命令是 ss。此命令類似於 netstat,但效率更高,用於轉儲套接字統計資訊。要列出所有已連線的 SSH 會話,可以使用“ss -t -a” 命令。

$ ss -t -a | grep ssh
tcp    ESTAB      0      0      10.0.0.1:ssh      10.0.0.1:46754        users:(("sshd",pid=9987,fd=3))
tcp    ESTAB      0      0      10.0.0.2:ssh      10.0.0.2:47754        users:(("sshd",pid=9987,fd=3))
tcp    ESTAB      0      0      10.0.0.3:ssh      10.0.0.3:48754        users:(("sshd",pid=9987,fd=3))

“-t” 選項僅顯示 TCP 連線,“-a” 選項顯示所有套接字。grep 命令用於過濾輸出,並僅顯示 ssh 連線。

結論

在本文中,我們討論了幾個用於在 Linux 上列出已連線SSH 會話的命令列工具。每個命令都有其自身的特定選項和輸出格式,因此您可以選擇最適合您需求的命令。建議在使用每個命令之前查閱其手冊頁,以確保您使用的是正確的選項並獲得預期的結果。

更新於:2023年1月20日

35K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告