确定当前是否通过远程桌面连接访问服务器

确定当前是否通过远程桌面连接访问服务器

例如,我有一个 4 人使用的服务器,该服务器中只有一个帐户。我们知道,当某人已经在访问它时,另一个用户访问了该服务器,当前用户将被断开连接。

有没有什么方法可以识别当前是否通过远程桌面连接访问服务器,以防止对活动用户的不必要干扰。

答案1

这适用于以下操作系统:Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Vista。尝试以下命令:

query session [<SessionName> | <UserName> | <SessionID>] [/server:<ServerName>] [/mode] [/flow] [/connect] [/counter]

这应该给出如下输出:

C:\>query session
 SESSIONNAME    USERNAME       ID STATE  TYPE   DEVICE
>console        Administrator1  0 active wdcon
 rdp-tcp#1      User1           1 active wdtshare
 rdp-tcp                        2 listen wdtshare
                                4 idle
                                5 idle

来源

希望这可以帮助。

答案2

编辑:关于 netstat 的答案,但是您会发现运行 qwinsta 绝对更好。

编辑:qwinsta 可以在远程服务器上运行。出于一些原因,我建议在 PsLoggedOn 之上使用它。

您可以使用 PsExec(来自工具,这有点像psexec.exe \\remote -u remote_username -p remote_passwd cmd.exe获取远程 shell 并运行 quser 或 qwinsta 来枚举活动会话。您需要管理员,并且我相信文件共享已打开(它使用默认的 C$/ADMIN$,某些家庭实例没有)。在工作组环境中这会更令人烦恼一些。

我可能忽略了一些更简单的东西,比如 quser 可以在另一台服务器上运行(可能不适合这种用例)或者你可以直接运行 quser 而不是先获取 shell(你可能可以)但是一旦有人测试过或在评论中告诉我,我就会添加它。

答案3

Windows Server 平台支持多个并发 RDP 会话(通常最多两个),如果用户尝试连接到已达到最大数量的服务器,则会发出警告。因此,只需为每个人创建单独的用户帐户,就可以完全避免您描述的情况 - 这是一项最佳安全做法。

如果没有单独的用户帐户,您当然会遇到这样的资源共享问题。但您也无法单独管理用户权限,也无法在事件日志中区分每个人。

即使在非服务器平台(例如 Windows 7、Windows 8.1、Windows 10 等)上,如果您拥有单独分配的用户帐户,您的情况也不会有问题。这些平台一次只允许一个会话处于活动状态。当 RDP 用户连接并且已经有一个活动会话时,将发生以下三件事之一:

  • 如果用于连接的帐户与活动会话所有者相同,则将建立连接。该用户的现有 RDP 连接将被丢弃。如果用户现有的会话在本地控制台上,则控制台将被踢出到“锁定屏幕”。
  • 如果用于连接的帐户与活动会话所有者不同,账户才不是具有管理员权限,则新会话将被拒绝。用户将被告知系统已在使用中,并且连接将被终止。
  • 如果用于连接的帐户与活动会话所有者不同,账户具有管理员权限,会话仍然不会立即建立。用户将被告知系统已在使用中,并且将获得选项强制活动用户退出系统以便他们可以登录。根据系统配置,强制新会话可能会导致活动用户的会话断开/锁定(但仍可稍后恢复)或他们实际上可能被注销。

话虽如此,这里有一些对现有答案的评论以及我自己的建议:

七月阴谋迈克尔·贝利本质上是同一个意思。QWINSTAQUSER都是QUERY实用程序的快捷方式,分别用于SESSIONUSER功能。 它们可以在带有 参数的远程计算机上运行/computer:,​​因此它们可用于在您实际连接之前检查系统。

的建议jas-本身对您来说没什么用,因为它要求您已经连接到远程系统,并且您希望在连接之前检查一下。但是,如果您使用 PsExec(由 Michael Bailey 建议)运行它,则可以完成您想要做的事情。不过,有更好的方法可以完成您需要做的事情,使用内置工具以及 Microsoft 提供的其他实用程序。

如果您已经拥有 PsTools,我建议您尝试使用 PsLoggedOn,而不是使用 PsExec 和 Netstat。PsLoggedOn 可以远程运行,并显示 RDP 会话和远程文件系统或注册表连接。远程运行 PsLoggedOn 的语法是:

PsLoggedOn \\servername

其他有用资源:

SS64
登入
查询用户/Quser
查询会话 / Qwinsta
执行程序
网络状态

科技网
工具

答案4

从命令提示符。

请注意,TCP 本地地址在 ESTABLISHED 状态下监听端口 3306 到外部地址 192.168.2.205

C:\Users\foo>netstat -anp tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:554            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING
...
  TCP    10.0.0.248:3306        192.168.2.205:48156    ESTABLISHED 
...
  TCP    192.168.130.1:139      0.0.0.0:0              LISTENING
  TCP    192.168.233.1:139      0.0.0.0:0              LISTENING

相关内容