为什么本地运行和通过 ssh 运行任务列表的结果不同

为什么本地运行和通过 ssh 运行任务列表的结果不同

我有一个安装了 cygwin 和 ssh 服务器的 Windows 机器,运行良好,然而今天我遇到了一个我试图使用的命令,它会根据是在本地使用还是通过 ssh 使用而返回不同的结果。

首先,我们得到通过 ssh 运行的结果......

ssh -i /tmp/tmpyEW3f0 [email protected] 'tasklist /FI "username eq Administrator"'
INFO: No tasks running with the specified criteria.

现在我们在 10.13.7.210 上本地运行相同的命令并收到此结果...

C:\Documents and Settings\Administrator>tasklist /FI "username eq Administrator"
Image Name                   PID Session Name     Session#    Mem Usage
========================= ====== ================ ======== ============
explorer.exe                 536 RDP-Tcp#14              0     24,400 K
jusched.exe                  776 RDP-Tcp#14              0      9,228 K
ctfmon.exe                   780 RDP-Tcp#14              0      3,456 K
ApacheMonitor.exe            796 RDP-Tcp#14              0      2,520 K
rdpclip.exe                  444 RDP-Tcp#14              0      4,344 K
jucheck.exe                 1160 RDP-Tcp#14              0      8,708 K
cmd.exe                      876 RDP-Tcp#14              0      2,852 K
tasklist.exe                3008 RDP-Tcp#14              0      4,292 K

知道为什么这些会产生不同的结果吗?

答案1

造成这种差异的原因据说是 Windows 的安全机制,其中用户会话是分开处理的。同一个用户帐户在本地和通过 SSH 登录时会创建两个不同的会话,因此这两个会话之间不会显示任何窗口标题。

根据 Bitvise SSH Server 的支持回复:

这在跨会话中不起作用是有道理的,因为不同登录的桌面应该彼此隔离。如果这在 FreeSSHD 上起作用,则似乎有可能在同一个桌面中启动该进程。

[...]

我不知道如何才能让窗口标题在 Windows 会话之间可访问。Windows 会阻止这种情况,因为桌面之间存在安全边界。


至于针对某些情况的可能解决方案:在类似情况下,我最终使用 WMIC 作为替代方案。

之前使用的调用是

tasklist /T /F /FI \"WINDOWTITLE eq Some window title\"

取而代之的是

wmic process where "commandline like '%%some command line%%' and name like '%%filename%%'" list

但请注意,WMIC 无法根据窗口标题或运行进程的用户帐户进行过滤。在我的例子中,应用程序有一个独特的可执行文件和命令行组合,可用于过滤,但并非所有情况都是如此,因此这种替代方案并非适用于所有情况。

相关内容