我正在尝试在几台机器上设置远程管理。我可以从计算机上成功执行远程计算机上的命令,但我不希望任何人能够这样做。
我尝试在远程计算机上设置可信主机,然后重新启动服务,但似乎没有做任何事情。
例如,在远程计算机上:
winrm set winrm/config/client '@{TrustedHosts="someIncorrectName"}'
然后我重启winrm服务。
为什么我仍然可以从笔记本电脑上运行远程命令?它不应该阻止执行命令吗?
我正在按以下方式运行命令:
Invoke-Command -cn remoteMachine -Credential $cred -scriptblock {get-process}
使用get-credential domain / username生成$ cred。
我已经阅读了一些关于TrustedHosts的内容,他们似乎就它的作用给出了相互矛盾的报道。有些人似乎说它可以防止命令在“可信主机”列表中未列出的计算机上执行。其他人说它是可以在该机器上运行命令的计算机列表。
MSDN说:“指定受信任的远程计算机列表。”这似乎意味着它是第二个选项(可以在机器上执行命令的计算机列表)。
我做错了什么?
由于
答案 0 :(得分:6)
TrustedHosts没有按照您的想法行事。与Unix .rhosts不同,此设置适用于PowerShell 客户端,而不是远程服务器端点。这就是为什么它出现在:
WSMan:\localhost\Client
如果它与侦听器相关,则它将位于Service
节点下。
正如另一个答案所涉及的,这通常用于非域或混合环境,以防止客户端向不受信任的远程计算机发送NTLM质询 - 响应或基本身份验证尝试。为什么?因为远程流氓服务器可能会捕获此信息并使用它来危害您的网络。当您处于混合环境中时,唯一可用的保护是SSL,许多人可能选择通过AllowUnencrypted = $false
再次在Client
驱动器的WSMAN
节点中禁用此功能。
那么,你如何限制传入连接?您现在应该已建立连接,并开始查看远程服务器上的WSMAN:\localhost\Service
节点。如果你这样做,你会看到:
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Service
Type Name SourceOfValue Value
---- ---- ------------- -----
System.String RootSDDL ...
System.String MaxConcurrentOperations 4294967295
System.String MaxConcurrentOperationsPerUser 1500
System.String EnumerationTimeoutms 240000
System.String MaxConnections 300
System.String MaxPacketRetrievalTimeSeconds 120
System.String AllowUnencrypted false
Container Auth
Container DefaultPorts
System.String IPv4Filter *
System.String IPv6Filter *
System.String EnableCompatibilityHttpList... false
System.String EnableCompatibilityHttpsLis... false
System.String CertificateThumbprint
System.String AllowRemoteAccess true
现在,向下看这个列表,你会看到一些有针对性的命名属性,如IPv4Filter
和IPv6Filter
。猜猜他们做了什么; - )