我只是透過 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 所在的任何地方)守護程式正在監聽)。wtmp
last
w
who
您可以採取的第三種方法是解析 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/)。
另一種解決方案是使用 , 的替代品netstat
。ss
例如(注意您不再需要 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
您也可以透過使用tty
或who
( w
) 來獲得一些資訊:(編輯:我看到它現在在另一篇文章的上面列出)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)