Answers:
who
或w
; who -a
有关其他信息。
这些命令仅显示终端设备上的所有登录会话。pts
如该TTY
列所示,SSH会话将位于伪终端从站()上,但并非所有pts连接都是SSH会话。例如,创建伪终端设备(例如xterm
或)的程序screen
将显示为pts
。有关对列中找到的不同值的更好描述,请参见pts和tty之间的差异TTY
。此外,这种方法不会显示任何登录到SFTP会话的人,因为SFTP会话不是Shell登录会话。
我不知道有什么办法明确显示所有SSH会话。你可以通过阅读登录信息推断此信息utmp
/ wtmp
通过工具一样last
,w
或who
像我刚才所描述的,或通过使用网络工具一样,其答案描述@sebelk无论你的SSH找到端口22(或打开的TCP连接守护程序正在监听)。
您可以采用的第三种方法是解析SSH守护程序的日志输出。根据您的操作系统发行版,SSH发行版,配置等,日志输出可能位于许多不同的位置。在RHEL 6盒子上,我发现了日志/var/log/sshd.log
。在RHEL 7盒子和Arch Linux盒子上,我需要使用journalctl -u sshd
来查看日志。某些系统可能将SSH日志输出到syslog。您的日志可能在这些地方或其他地方。这是您可能看到的示例:
[myhost ~]% cat /var/log/sshd.log | grep hendrenj | 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
。大多数时候,这将为您提供所需的信息。
您可以使用以下命令查看每个会话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:
pgrep -ai sshd
pgrep: invalid option -- 'i'
在Ubuntu 14.04上
-i
仅适用于mac / bsd口味。在ubuntu上您可以使用pgrep -af ssd
。有关详细信息,请参阅serverfault.com/a/883270/116777
添加以供参考。
如果您使用的是伪shell(例如:/ dev / pts / 0),则最简单的方法之一是:
[user1@host ~]$ echo $SSH_CONNECTION
它应该返回:您的ip和port以及您连接到的IP和port
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)
SECONDS
全局。您可以使用via echo $SECONDS
,它可以显示时间量,因为自觉的连接
扩展@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
您可以使用
last | head
我在.login脚本中使用了多年,以查看谁最近登录了系统。这是一个安全性较差的设备,可以使用您的登录信息查看是否有人在系统上。
last
可能不会列出。
last
支持-p
?它有什么作用?
"last from util-linux 2.31.1"
肯定具有它。
who -a
命令的输出