我在 Windows 服务器上,想知道谁通过 ssh 进入了服务器。在 Linux 上,以下命令有效
who -s
Windows 10 上的替代方案是什么?
使用提升的 PowerShell,您可以通过以下方式列出所有登录用户:
Get-CimInstance -ClassName Win32_LogonSession | Get-CimAssociatedInstance -Association Win32_LoggedOnUser
要仅获取通过 SSH 登录的用户,您可以使用以下管道:
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'sshd.exe'" | Get-CimAssociatedInstance -Association Win32_SessionProcess | Get-CimAssociatedInstance -Association Win32_LoggedOnUser | Where-Object {$_.Name -ne 'SYSTEM'}
解释:
您正在寻找已登录的帐户(通过 SSH)。在 WMI 中,帐户由Win32_Account https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-account班级。登录会话由Win32_LogonSession https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logonsession班级。如果用户登录,则会出现Win32_Account
将与一个相关联Win32_LogonSession
。该关联将由一个实例表示Win32_LoggedOnUser https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-loggedonuser class.
上面的第一个管道获取所有现有登录会话并返回与这些登录会话关联的所有用户帐户。总之,您将获得所有登录用户的列表。
要获取通过 SSH 登录的所有用户的列表,您可以评估更多关联。每个过程(Win32_Process https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-process)通过以下方式与登录会话关联Win32_SessionProcess https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-sessionprocess班级。上面的第二个管道执行以下操作:
- 它过滤所有进程,仅获取 SSH 守护进程的进程。
- 对于 SSH 进程,它确定关联的登录会话(
Win32_LogonSession
)通过Win32_SessionProcess
协会类。
- 然后,它使用这些登录会话通过以下方式确定登录的用户:
Win32_LoggedOnUser
关联类就像第一个管道中的那样。
- 最后,它过滤结果以省略
SYSTEM
帐户。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)