第23章 高级远程控制配置
第23章 高级远程控制配置
23.3 启用多跳远程控制(multi-hop remoting)
从计算机A开始,并创建了一个PowerShell会话连接到计算机B。这是第一跳,通常该步骤可以正常工作。但当请求由计算机再次创建第二跳,或者连接到计算机C时,操作失败。
问题是由于PowerShell将凭据由计算机A委托到计算机B时出现的。所谓委托,是使得计算机B以你的身份运行任务的过程,因此确保你可以在计算机B上做任何有权限做的事儿,但无法做权限之外的事儿。默认情况下,委托只能传输一跳;计算机并没有权限将你的凭据委托给第三台计算机,也就是计算机C。
在Windows Vista以及之后版本,你可以启用多跳委托。该过程需要两步。
(1)在你的计算机(比如计算机A)上,运行Enable-WSManCredSSP -Role Client -Delegate Computer x
。可以将“x”替换为希望将身份委托到的计算机名称。你可以指定具体的计算机名称,当然也可以使用通配符。我们不推荐使用,这会导致一些安全问题,但是可以对整个域进行授权,比如.company.com。
(2)在第一跳连接的计算机(比如计算机B)上,运行Enable-WSManCredSSP -Role Server
。
通过上述命令所做的变更,将会应用到计算机的本地安全策略:你也可以通过组策略对象手动进行变更,在较大的域环境中可能需要这么做。
23.4 深入远程控制身份验证
PowerShell远程控制采用了双向身份验证,这意味着远程计算机必须向你证明它的身份。换句话说,当你执行Enter-PSSession -computername DC01
时,名称为DC01的计算机必须在连接建立完成前证明它就是DC01。
23.4.1 双向身份验证默认设置
微软期望更多是在域环境下使用PowerShell。因此可以通过活动目录列出的实际计算机名称连接到计算机,域会为你处理双向身份验证。在访问其他可信任的计算机时也可以由域处理双向身份验证。该技巧需要你为PowerShell提供的计算机名称满足以下两点要求。
- 名称可以被解析为IP地址。
- 名称必须与活动目录中的计算机名称匹配。
提供你所在域的计算机名称,而对于可信域则需要提供完全限定名(也就是计算机和域名称,比如DC01.COMPANY.LOC),这样远程控制通常就会生效。但如果你提供的是IP地址,或者需要提供与DNS中不同的名称(比如说CNAME别名),那么默认的双向身份验证将无法正常工作。因此你只有如下两种选择:SSL或是“受信任的主机”。
23.4.2 通过SSL实现双向身份验证
要想通过SSL实现双向身份验证,你必须获得目标计算机的SSL数字证书。证书颁发给的计算机名称必须与你输入访问的计算机名称相同。由于这并不是大部分人会去配置的工作,我们在此不会将该部分内容包含在内。
23.4.3 通过受信任的主机实现双向身份验证
该技术比使用SSL证书略微简单,需要的配置步骤也会少很多。但该方式更加危险,这是由于该技术主要是对于选定的主机关闭双向身份验证。
然后你仅需一种方式去识别哪些计算机不需要双向验证。在一个域中,这或许是类似“*.COMPANY.COM”这样在Company.com域中的所有主机。
这是你需要配置整个域设置的一个实例,所以我们给你一个操作组策略的指南。该指南对于单机中的本地安全策略同样有效。
在任意GPO或本地计算机策略编辑器中,执行这些步骤。
(1)展开计算机配置。
(2)展开管理模板。
(3)展开Windows组件。
(4)展开Windows远程控制管理。
(5)展开WinRM客户端。
(6)双击受信任的主机。
(7)启用策略并添加信任的主机列表,多个条目可以通过逗号分隔,比如“.company.com,.sales.company.com”。
现在你就可以在没有双向身份验证拦截的情况下连接到这些计算机。所有用于连接到这些计算机的远程控制命令中必须提供-Credential参数——如果不这么做,可能会导致连接失败。