使用IP地址作为目标的PowerShell远程控制

70
我已经成功在我的Server 2008 R2上启用了PSRemoting。 当我使用主机名作为目标,在同一网络内可以进行远程pssession。
但是,当我尝试从任何计算机(在网络内或通过VPN连接从另一个网络)使用IP地址作为目标时,我失败了。我希望能够通过VPN连接使用远程控制,因为在这种情况下必须使用IP地址,无法解析主机名。
我不想在我的hosts文件中添加名称,因为我们客户端的其他几个服务器具有相同的DNS名称,我不想一次又一次地删除并插入名称-IP地址关联。
我希望有人告诉我如何允许通过IP调用psremoting目标。
编辑:更具体地说,我希望能够运行以下内容:
Enter-PSSession -Computername 192.168.123.123 -credentials $cred 

如果我想用“-Computername”运行该命令,只有在传递主机名时才能运行。

编辑2:
当我尝试使用IP地址进行登录(来自内部网络)而不是主机名时,出现以下错误消息:

Enter-PSSession : Connecting to remote server failed with the following error message : The WinRM client cannot process
 the request. Default authentication may be used with an IP address under the following conditions: the transport is HT
TPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure T
rustedHosts. Note that computers in the TrustedHosts list might not be authenticated. For more information on how to se
t TrustedHosts run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting
 Help topic.

编辑3:
我知道WSMan的trusted-hosts设置,但那似乎不是问题所在。它已经设置为“*”(在启用远程之后我就这样做了),但我仍然无法使用IP作为目标计算机名称连接到该服务器,但我可以使用主机名作为目标计算机名称进行连接。看起来像是IIS中的绑定防止侦听器监听针对IP地址而非主机名的请求。但是并没有安装IIS。我不知道要查找此类设置的位置。

更新2011-07-12:
好吧,我认为trustedhosts-setting不是问题,因为我可以通过主机名从我们的DC连接,但如果我使用目标计算机参数的目标IP地址,就无法连接。
我认为问题必须是侦听器。也许侦听器不接受针对目标IP而非目标主机名的请求。但我不知道如何更改。


Enable-PSRemoting 没有 -ComputerName 参数。您是不是想使用 Enter-PSSession 命令? - Rynant
嗯,是的。我有点困惑 :) 我会编辑一下。 - wullxz
尝试运行该命令时,您收到了什么错误信息? - Matt
10个回答

58
错误消息已经给你了大部分需要的信息。这不仅涉及到TrustedHosts列表; 它说的是,为了使用默认身份验证方案的IP地址,你必须同时使用HTTPS(默认情况下未配置)并提供明确的凭据。我可以告诉你至少没有使用SSL,因为你没有使用-UseSSL开关。
请注意,默认情况下未配置SSL / HTTPS-您将需要执行额外的步骤。你不能只添加-UseSSL。
默认的身份验证机制是Kerberos,它想看到AD中显示的真实主机名。不是IP地址,也不是DNS CNAME昵称。有些人会启用基本身份验证,这样就不太严格了-但是您还应该设置HTTPS,否则您将以明文形式传递凭据。Enable-PSRemoting仅设置HTTP。
向主机文件添加名称是行不通的。这不是名称解析的问题;而是关于计算机之间的相互身份验证如何进行的问题。
此外,如果在此连接中涉及的两台计算机不属于同一AD域,则默认的身份验证机制将无法工作。请阅读“help about_remote_troubleshooting”以获取有关配置非域和跨域身份验证的信息。
来自http://technet.microsoft.com/en-us/library/dd347642.aspx的文档。
HOW TO USE AN IP ADDRESS IN A REMOTE COMMAND
-----------------------------------------------------
    ERROR:  The WinRM client cannot process the request. If the
    authentication scheme is different from Kerberos, or if the client
    computer is not joined to a domain, then HTTPS transport must be used
    or the destination machine must be added to the TrustedHosts
    configuration setting.

The ComputerName parameters of the New-PSSession, Enter-PSSession and
Invoke-Command cmdlets accept an IP address as a valid value. However,
because Kerberos authentication does not support IP addresses, NTLM
authentication is used by default whenever you specify an IP address. 

When using NTLM authentication, the following procedure is required
for remoting.

1. Configure the computer for HTTPS transport or add the IP addresses
   of the remote computers to the TrustedHosts list on the local
   computer.

   For instructions, see "How to Add a Computer to the TrustedHosts
   List" below.


2. Use the Credential parameter in all remote commands.

   This is required even when you are submitting the credentials
   of the current user.

谢谢Don的回答。这解决了我很多的困惑。我现在无法进行测试,但我会尽快测试。如果我理解得正确,那么我所需要做的就是按照这个kb来配置WinRM以便也能够监听https请求,对吗? - wullxz
是的,还要处理TrustedHosts列表并明确提供凭据。您可能还会发现需要启用基本身份验证而不是Kerberos。 - Don Jones
是的,启用基本身份验证改变了问题。不幸的是,在我按照说明和各种教程和操作指南后,我收到了一个访问被拒绝的消息。我不知道为什么我没有访问权限。当我尝试通过主机名连接时,凭据是有效的。没关系...我找到了一种不需要PSRemoting的解决方案。但还是谢谢你的帮助。我现在更好地理解远程处理过程,并且我认为这与WinRM设置拒绝我的访问有所不同。 - wullxz
对我来说,问题在于IP地址:端口。我改成了主机名:端口,然后它就可以工作了。谢谢。 - Sunil Buddala

32

尝试这样做:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force

那也不起作用。该值已经设置为“*”。但是有某些策略或设置阻止客户端通过 IP 连接。我需要更改那个设置,而不是受信任的主机(我已经知道受信任的主机设置)。 - wullxz
2
这个命令应该在源端(工作站 - 远程连接自)还是目标端(虚拟机 - 远程连接至)使用? - Aboodnet

5

我在我的基础设施中测试了您的断言,IP地址不是问题,以下内容适用于我:

PS C:\Users\JPB> hostname
JPBCOMPUTER
PS C:\Users\JPB> Enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>
[192.168.183.100]: PS C:\Users\jpb\Documents> hostname
WM2008R2ENT

如果您尝试通过VPN工作,最好查看通往服务器的防火墙设置。可以使用“Windows远程管理安装和配置”(Installation and Configuration for Windows Remote Management)进行帮助。WinRM等待的TCP端口为:

WinRM 1.1及更早版本:默认HTTP端口为80。

WinRM 2.0:默认HTTP端口为5985。


编辑:根据您的错误,请在客户端计算机上测试此内容:

Set-Item WSMan:\localhost\Client\TrustedHosts *

我也无法通过内部网络连接IP。我尝试从我们的DC进行连接,只有在使用目标主机名时才能正常工作。我将编辑我的错误消息。 - wullxz

3
在您的计算机上运行以下命令:'Set-Item WSMan:\localhost\Client\TrustedHosts -Value "$ipaddress"
*这台计算机是您运行PSSession的计算机。

如果您需要多个 IP 地址处于受信任的主机中,则添加-Concat。 - Mardok

3

大家已经提供了简单的解决方案,你应该查看帮助文档——它很好,看起来一次性涉及很多内容,但实际上很快就能阅读完:

get-help about_Remote_Troubleshooting | more

5
如果你使用“help about_remote_troubleshooting”命令,就可以跳过“| more”这一部分。 - Don Jones

2
在Windows 10上,确保WinRM服务正在运行以调用命令非常重要。
使用以下命令:Set-Item wsman:\localhost\Client\TrustedHosts -value '*' -Force

1
请在客户端尝试以下操作:
运行以下命令以恢复侦听器配置:
winrm invoke Restore winrm/Config

运行以下命令以执行Windows远程管理服务及其侦听器的默认配置:
winrm quickconfig

在重新配置winrm后,确保主机被信任:

Set-Item wsman:\localhost\Client\TrustedHosts -value "$ipaddress" -Force 

尝试重新进行远程连接

参考文献

为 HTTPS 配置 WinRM


1

对于那些不在意遵守由微软强制实施的任意限制的人,你可以简单地添加一个host file entry到你尝试连接的服务器的IP地址上,而不是使用该IP地址来绕过此限制。

Enter-PSSession -Computername NameOfComputerIveAddedToMyHostFile -credentials $cred 

0

我花费了很多时间,最终找到了解决方案。以下是修复此问题的步骤 -

  1. 在控制面板中转到控制面板\所有控制面板项\网络和共享中心\高级共享设置
  2. 确保域和访客中的机器发现已打开。
  3. 在客户端计算机上以管理员模式打开powershell并运行winrm quickconfigwinrm set winrm/config/client '@{TrustedHosts="*"}'

0

正如Don所提到的,这里有更多信息。

使用IP地址进行Kerberos身份验证可能会出现问题。

如果您在AD域上,并且需要比允许NTLM和受信任的主机更优雅的解决方案: https://learn.microsoft.com/en-us/windows-server/security/kerberos/configuring-kerberos-over-ip

"从Windows 10版本1507和Windows Server 2016开始,Kerberos客户端可以配置为支持SPN中的IPv4和IPv6主机名。

默认情况下,如果主机名是IP地址,则Windows不会尝试进行Kerberos身份验证。它将退回到其他启用的身份验证协议(如NTLM)。

请注意,域中可能存在限制/禁用NTLM的GPOs,因为这可能是安全风险。 要检查,请运行"RSOP"。 GPO位于:计算机配置>策略>Windows设置>安全设置>本地策略/安全选项>网络安全。

允许基本认证并在受信任主机中允许“*”让我有些不安 :)

祝顺利


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接