有多少远程用户?

有多少远程用户?

我需要统计有多少人远程登录到我在学校的虚拟机。我可以判断是否有人从主机 ssh 登录,但无法判断某人是否通过 VNC 远程登录到 XWindows 会话,或者他们是否坐在学校的控制台前。当我从家里登录学校虚拟机并执行 who 操作时,当我是唯一登录的人时,它会显示以下内容:

 user1   tty7    2013-10-10 23:31 (:1)
 user1   pts/0   2013-10-10 23:23 (:1.0)

注意:任何人都无法直接登录虚拟机。必须登录学校 LAN,然后登录 VM 主机,然后登录 VM。我真的很想知道如果我必须从虚拟机的主机登录,是否会被视为远程登录。

答案1

WHO

您必须使用几种方法来完成此操作。您可以使用该who命令查看谁拥有活动 shell 或已ssh进入您的虚拟机。

$ who | cut -d' ' -f1 | sort -u
saml

用户

您还可以使用该命令user查看谁登录了。这些是当前在日志文件/var/run/utmp&中显示为活动的用户/var/log/wtmp

$ users | sed 's/ /\n/g'|sort -u
saml

谁重访了

如果您使用该命令,who您会注意到以下几行:

$ who
saml     tty1         2013-10-06 10:05 (:0)
saml     pts/0        2013-10-06 10:07 (:0.0)
saml     pts/5        2013-10-07 11:48 (:0.0)

第二列 (tty1) 表示某人在本地连接到其中一个物理终端。此外,您会注意到该行的第五列显示 (`:0)。这意味着有人直接坐在虚拟机上并运行 X 桌面。

其他行pts/0是伪终端,通常是在 gnome-terminal 中创建选项卡或通过 ssh 进入框中时创建的内容。

虚拟网络连接?

这个有点棘手。确实没有办法直接知道这一点,特别是因为 VNC 服务器已集成到 X 中。寻找进程没有显示任何内容。

$ pgrep -f vnc
$

您可以寻找 VNC 网络连接:

$ sudo netstat -anpt | grep -i Xorg
tcp        0      0 0.0.0.0:5900                0.0.0.0:*                   LISTEN      3948/Xorg           
tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      3948/Xorg           
tcp        0      0 192.168.1.3:5900            192.168.1.20:41064          ESTABLISHED 3948/Xorg           
tcp        0      0 :::6000                     :::*                        LISTEN      3948/Xorg

这里你可以看到有一个从IP 192.168.1.3到端口5900的VNC连接,该端口通常用于VNC,但这个端口绝不是保证。

当连接断开时,连接看起来像这样:

 $ netstat -anpt | grep -i Xorg
tcp        0      0 0.0.0.0:5900                0.0.0.0:*                   LISTEN      3948/Xorg           
tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      3948/Xorg           
tcp        0      0 :::6000                     :::*                        LISTEN      3948/Xorg      

此外,我们还可以查明 X 服务器是否正在运行 VNC(看起来确实如此)。

$ lsof -p 3948 | grep -i vnc
Xorg    3948 root  mem    REG      253,0   394420   48693751 /usr/lib/xorg/modules/extensions/libvnc.so

针对 VNC 用户的最佳选择可能是消除实际上在机器上的用户(物理终端上的用户,例如 tty1),任何拥有 GNOME 会话的人都在运行 X 桌面,并且可能使用 VNC 连接到它。

$ ps -f -p $(pgrep -f gnome-session)
UID        PID  PPID  C STIME TTY          TIME CMD
root     22240  3943  0 Sep29 ?        00:00:00 /usr/bin/gnome-session

参考

相关内容