列出所有已連線的 SSH 會話?

列出所有已連線的 SSH 會話?

我只是透過 SSH 連接到 root,然後再次透過 SSH 連接到同一台電腦上的 root。所以我有兩個視窗打開,兩個視窗都透過 SSH 連接到我的遠端電腦上的根目錄。

從 shell 中,我怎麼才能看到這兩個會話的清單?

答案1

who或者w;who -a獲取更多資訊。

這些命令僅顯示終端機設備上的所有登入工作階段。 SSH 會話將在偽終端從站 ( pts) 上進行,如列中所示TTY,但並非所有 pts 連線都是 SSH 會話。例如,建立偽終端設備(例如xterm或 )的程式screen將顯示為pts。看pts 和 tty 之間的區別更好地描述TTY列中找到的不同值。此外,此方法不會顯示登入 SFTP 會話的任何人,因為 SFTP 會話不是 shell 登入會話。

我不知道有什麼方法可以明確顯示所有 SSH 會話。您可以透過、或像我剛剛描述的那樣的工具utmp讀取登錄信息來推斷此信息,或者使用其答案中描述的@sebelk 等網絡工具來查找端口22 上打開的tcp 連接(或您的SSH 所在的任何地方)守護程式正在監聽)。wtmplastwwho

您可以採取的第三種方法是解析 SSH 守護程式的日誌輸出。根據您的作業系統發行版、SSH 發行版、設定等,您的日誌輸出可能位於多個不同的位置。在 RHEL 6 機器上,我發現了/var/log/sshd.log.在 RHEL 7 機器以及 Arch Linux 機器上,我需要使用journalctl -u sshd它來查看日誌。某些系統可能會將 SSH 日誌輸出到 syslog。您的日誌可能位於這些地方或其他地方。以下是您可能會看到的範例:

[myhost ~]% grep hendrenj /var/log/sshd.log | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

日誌顯示會話何時開啟和關閉、會話屬於誰、使用者從哪裡連線等等。但是,你必須做一個很多如果您想將其從簡單的、人類可讀的事件日誌獲取到當前活動會話的列表,並且在完成解析後它仍然可能不是準確的列表,因為日誌不實際上包含足夠的資訊來確定哪些會話仍然處於活動狀態- 您本質上只是猜測。使用這些日誌獲得的唯一優勢是資訊直接來自 SSHD,而不是像其他方法一樣透過二手來源。

我建議只使用w.大多數時候,這將為您提供所需的資訊。

答案2

您可以使用以下命令查看每個會話 ssh:

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

或者這可能有用:

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:



       

答案3

擴展@sebelk的答案:

使用的解決方案netstat是一個很好的解決方案,但需要 root 權限。此外,該net-tools軟體包(提供netstat)在一些較新的 Linux 發行版中已被棄用(https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/)。

另一種解決方案是使用 , 的替代品netstatss例如(注意您不再需要 root):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628

答案4

添加以供簡單參考。

如果您處於偽 shell 中(例如: /dev/pts/0 ),最簡單的方法之一是:

[user1@host ~]$ echo $SSH_CONNECTION

它應該返回:你的 ip 和端口以及你連接的 ip 和端口

192.168.0.13 50473 192.168.0.22 22

您也可以透過使用ttywho( w) 來獲得一些資訊:(編輯:我看到它現在在另一篇文章的上面列出)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)

相關內容