我需要统计有多少人远程登录到我在学校的虚拟机。我可以判断是否有人从主机 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