列出所有已连接的 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)

相关内容