我正在尝试将 Powershell 从加入域的 PC 远程连接到 DMZ 中的服务器,但我不知道如何让它工作。
DMZ 服务器在启用的默认端口 5985 上为 HTTP 配置了侦听器。计算机中的两个 NIC 都标记为公共网络,因此我更改了公共配置文件的 Windows 远程管理 (HTTP-In) 防火墙规则,以接受来自我的 IP 以及已配置的本地子网的连接。
在我的客户端计算机 (Windows 10) 上,我将服务器的主机名添加到 WSMan:\localhost\Client\TrustedHosts,并将 LocalAccountTokenFilterPolicy(值:1,类型:DWORD)添加到注册表。
我使用服务器的本地凭据(服务器名\用户名)创建一个凭据对象,然后尝试
$Sess = New-PSSession -ComputerName DMZCOMPUTER -Port 5985 -Credential $Cred
连接始终尝试使用 Kerberos 连接到计算机,这显然是行不通的。
如果我尝试
$Sess = New-PSSession -ComputerName DMZCOMPUTER -Port 5985 -Credential $Cred -Authentication Basic
,我会收到一条错误消息,表明未加密的流量当前已被禁用。其他身份验证方案会产生不同的错误消息,但我从未能够远程。
我是否在某处缺少配置?使用远程 Powershell 从加入域的客户端连接到工作组服务器需要哪些设置(服务器和客户端)。
我最终明白了这一点,我所做的事情存在一些问题。首先,https://blogs.msdn.microsoft.com/wmi/2009/07/24/powershell-remoting- Between-two-workgroup-machines/ 的链接包含一些不正确的信息。它指出 LocalAccountTokenFilterPolicy 注册表项应该位于客户端计算机上,这是不正确的,它应该位于服务器计算机上。
另一个修复是我是个傻瓜,在 TrustedHosts 值中使用服务器的 FQDN,然后在尝试创建会话时仅使用主机名。
如果其他人试图使其正常工作,请遵循以下步骤:
Enable-PSRemoting
winrm enumerate winrm/config/listener
LocalAccountTokenFilterPolicy
注册表项Get-PSSessionConfiguration
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <hostname or FQDN or server>
-Concatenate
添加到 Set-Item
的末尾$Cred = Get-Credential
我刚刚按照kevmar的建议输入了用户名和密码(不是服务器名\用户名)$S = New-PSSession -ComputerName <same name exactly that you put in the TrustedHosts> -Credential $Cred
ComputerName
参数和 TrustedHosts 中是否使用相同的名称LocalAccountTokenFilterPolicy
是否已在服务器首先尝试仅使用您的用户名和密码创建一个凭证对象。跳过尝试在凭据中指定域名或服务器名称。
然后尝试使用 IP 地址而不是计算机名称进行连接。您仍然需要将其添加到受信任的主机值中。
最后要使用的是
Test-WSMan
来解决您的问题。提供的错误消息应该会强烈提示您问题所在。
德米特里: 下午好
$servers 包含主机名列表,当主机名数量达到 20 个时,New-PSSession -ComputerName $servers -credential $cred-ThrottleLimit 70 有效,但如果超过 20 个(即 50 个),则会出现错误:
尚不清楚为什么添加一台计算机时一切都会崩溃。我将其删除并记录所有内容。目前尚不清楚这个 20 台计算机的阈值从何而来(我在任何地方都没有发现类似的问题。所有计算机都是可信的。