【问题标题】:PowerShell Remoting to a Workgroup ComputerPowerShell 远程处理工作组计算机
【发布时间】:2017-03-08 00:01:29
【问题描述】:

我正在尝试将 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 从加入域的客户端连接到工作组服务器需要哪些设置(服务器和客户端)。

【问题讨论】:

标签: powershell powershell-remoting


【解决方案1】:

我最终明白了这一点,我正在做的事情有几个问题。首先https://blogs.msdn.microsoft.com/wmi/2009/07/24/powershell-remoting-between-two-workgroup-machines/ 的链接有一些不正确的信息。它指出 LocalAccountTokenFilterPolicy 注册表项应该在客户端计算机上,这是不正确的,它应该在服务器计算机上。

另一个解决方法是我在 TrustedHosts 值中使用服务器的 FQDN,然后在尝试创建会话时只使用主机名。

如果其他人正在尝试使其正常工作,请遵循以下步骤:

  1. 在服务器机器上运行Enable-PSRemoting
    • 这将启动 WinRM 服务并将其启动设置为自动
    • 它将创建一个 HTTP 监听器
      • 您可以通过运行winrm enumerate winrm/config/listener 来验证这一点
    • 它将启用 Windows 远程管理防火墙规则
    • 它将创建和配置LocalAccountTokenFilterPolicy 注册表项
    • 它将重置四个会话主机的权限
      • 您可以通过运行Get-PSSessionConfiguration 来验证这一点
  2. 在客户端机器上启动 WinRM 服务
  3. 运行Set-Item WSMan:\localhost\Client\TrustedHosts -Value <hostname or FQDN or server>
    • 如果您尝试将服务器添加到列表中,可以将 -Concatenate 添加到 Set-Item 的末尾
  4. 运行$Cred = Get-Credential 我刚刚按照kevmar 的建议输入了用户名和密码(不是服务器名\用户名)
  5. 运行$S = New-PSSession -ComputerName <same name exactly that you put in the TrustedHosts> -Credential $Cred等命令
  6. 如果一切正常,命令应该返回
  7. 如果您收到提及 Kerberos 的错误,请检查您在 ComputerName 参数和 TrustedHosts 中使用的名称是否相同
  8. 如果您收到拒绝访问错误,请检查是否在 服务器 上配置了 LocalAccountTokenFilterPolicy

【讨论】:

  • 哇,如果没有域和公共网络配置文件,如果没有这篇文章,我永远无法完成这项工作。我一直在服务器上设置 TrustedHosts。您仍然必须在公共网络中像这样将客户端 ip 添加到服务器防火墙:“Set-NetFirewallRule -Name WINRM-HTTP-In-TCP -RemoteAddress ”(名称不是您在防火墙控制面板中看到的名称,但注册表项。)复制项与 pssession 一起使用很好。
  • 对于公共网络也可以使用“enable-psremoting -force -skipnetworkprofilecheck”。
  • 在 win7 中,您可以安装 powershell 4 (wmf 4),然后运行“enable-psremoting -force -skipnetworkprofilecheck”,即使是启用了 uac 和公共网络配置文件的系统用户。不过,仍然没有 powershell 防火墙命令。 microsoft.com/en-us/download/details.aspx?id=40855 (Windows6.1-KB2819745-x64-MultiPkg.msu) 微软建议不要在 PS 2.0 中启用它。 msdn.microsoft.com/en-us/powershell/reference/5.1/…
  • 我刚刚了解到你可以这样做:$S = New-PSSession -ComputerName 's1','s2','s3','s4'
  • LocalAccountTokenFilterPolicy 是 Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 基于 KB 951016
【解决方案2】:

首先尝试使用您的用户名和密码创建一个凭证对象。跳过尝试在凭据中指定域或服务器名称。

然后尝试使用 IP 地址而不是计算机名称进行连接。您仍然需要将其添加到受信任的主机值中。

最后要使用Test-WSMan 来解决您的问题。所提供的错误消息应该会为您提供有关问题所在的强烈提示。

【讨论】:

  • 感谢您的帮助。这将我推向了正确的方向,Test-WSMan 有助于排除故障。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多