情况:
在 Windows 防火墙处于活动状态时,运行 PsExec 需要 20 秒,而在禁用防火墙的情况下则需要 1 秒。
防火墙中添加的例外:
- 按照以下说明打开端口 135 和 445(均为 TCP)http://jamesrayanderson.blogspot.co.uk/2010/04/psexec-and-ports.html
- “允许应用程序通过防火墙”选择“远程服务管理”
- 确保网络设置为私有
如果没有这两个,它根本无法连接。目标机器运行 Windows 10。在 20 秒的等待期间,它显示“正在启动 PsEXESVC”
经过简单的 wireshark 检查我们发现,我们还需要打开另一个正在请求的端口。
- 我第一次运行这个程序时是 49669,第二次是 49670
不知道为什么,也不知道它会接受什么范围,有什么想法吗?
是否有一份 PSEXEC 需要打开哪些端口的明确列表?
答案1
显然,这是启用“远程服务管理”时组策略客户端出现的问题。
解决方法是运行以下命令:
netsh advfirewall firewall set rule name="Remote Service Management (RPC)" profile=domain new enable=yes
我使用 PsExec(运行缓慢)远程批量执行了此操作,如下所示,给定受影响的工作站,在 Workstations.txt 中每行一个计算机名称:
for /f %i in (workstations.txt) do @start /B psexec \\%i netsh advfirewall firewall set rule name="Remote Service Management (RPC)" profile=domain new enable=yes
执行psexec @workstations.txt
(而不是使用 for 循环)仍会以串行方式缓慢地运行命令,延迟大约 20 秒。如果工作站数量合理,上述命令将同时启动所有工作站。当然还有其他方法可以远程运行命令,但这种方法对我来说效果很好。
答案2
PSExec 使用 RPC,它使用随机分配端口;对于现代 Windows,该范围在 49152+ 内。
如果您使用 Windows 防火墙,则有一个内置的“远程服务管理”规则将允许这些动态端口。如果您觉得有必要,还可以通过一些注册表调整来自定义它。
答案3
必须启用三条规则:
Remote Service Management (NP-In)
Remote Service Management (RPC)
Remote Service Management (RPC-EPMAP)
更多信息请点击这里: https://serverfault.com/a/1100581/965884
答案4
以下是允许 PSExec 远程进入所需的全部内容。按以下顺序在目标 PC 上运行这些。在 Win11 和 WinSer22 上测试:
PowerShell-管理员:
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
CMD-管理员:
winrm qc -force
netsh AdvFirewall firewall add rule name=PSExec dir=In action=allow protocol=TCP localport=RPC profile=domain,private program=""%WinDir%\system32\services.exe"" service=any
netsh AdvFirewall firewall set rule group="Remote Service Management" new enable=yes
您可能需要重新启动才能使所有更改生效。