第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)
第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)
这章的关键词:端点(Session Configuration)、受限端点、Register-PSSessionConfiguration、CredSSP 多跳、双向身份验证(Kerberos/SSL/TrustedHosts)。目标:把远程控制从“能连”升级为“更安全、更可控、可授权”。
1)端点是什么?为什么要换端点
-
一台机器上可以有多个端点(会话配置)。默认是
Microsoft.PowerShell
(64 位机再附带Microsoft.PowerShell32
)。 -
查看端点:
Get-PSSessionConfiguration
-
连接到 非默认端点(如 32 位):
Enter-PSSession -ComputerName SERVER -ConfigurationName Microsoft.PowerShell32
-
何时用 32 位端点:目标上只有 32 位模块/插件时。
2)自定义端点:用“受限环境”做最小授权
核心思路:先用 New-PSSessionConfigurationFile
生成 .pssc
文件(定义能用什么命令/模块),再用 Register-PSSessionConfiguration
注册成为新端点并授予访问者。
示例:给 HelpDesk 只读网卡命令
# 1) 生成配置文件(RestrictedRemoteServer 会移除大多数核心命令)
New-PSSessionConfigurationFile `-Path C:\HelpDeskEndpoint.pssc `-ModulesToImport NetAdapter `-SessionType RestrictedRemoteServer `-CompanyName "Our Company" `-Author "Ops Team" `-Description "NetAdapter read-only for HelpDesk" `-PowerShellVersion '3.0'# 2) 注册端点,指定以某凭据运行、弹出权限 UI 设置谁能连
Register-PSSessionConfiguration `-Path C:\HelpDeskEndpoint.pssc `-RunAsCredential 'DOMAIN\HelpDeskProxyAdmin' `-ShowSecurityDescriptorUI `-Name HelpDesk
要点:
-
RunAsCredential:端点中命令以这个账户运行(解决“HelpDesk 没权限但需要查阅”的场景)。
-
-ShowSecurityDescriptorUI:图形界面设置“谁能连端点”(给 HelpDesk 组 读取+执行 权限)。
-
连接测试:
Enter-PSSession -ComputerName SERVER -ConfigurationName HelpDesk Get-Command # 只能看到少量核心命令 + NetAdapter 模块命令
-
维护:
Set-PSSessionConfiguration -Name HelpDesk -ShowSecurityDescriptorUI Unregister-PSSessionConfiguration -Name HelpDesk
提示:想进一步只暴露少数命令,可在
.pssc
中用-VisibleCmdlets/-VisibleFunctions
精细列出;这是 JEA(Just Enough Administration) 的基础。
3)多跳远程(A→B→C)的问题与 CredSSP
默认 凭据只委托一跳。A 到 B 可行;B 再到 C(访问文件共享/WMI/SQL)会失败。解决方案之一:启用 CredSSP(需接受其安全前提)。
配置步骤
在 A(客户端):
Enable-WSManCredSSP -Role Client -DelegateComputer 'B.domain.com' # 可用通配符,谨慎使用
在 B(服务器):
Enable-WSManCredSSP -Role Server
使用时显式指定:
Enter-PSSession -ComputerName B.domain.com -Authentication CredSSP -Credential (Get-Credential)
# 或
Invoke-Command -ComputerName B.domain.com -Authentication CredSSP -Credential (Get-Credential) -ScriptBlock { ... }
风险与建议:CredSSP 会把可再委托的凭据交给 B,需确保 B 可信且受控(补丁、硬化、最小权限)。
4)双向身份验证(Mutual Auth):Kerberos / SSL / TrustedHosts
远程时不仅你要证明“你是谁”,对端也要证明“它是谁”。默认在 域内用 Kerberos,要求:
- 你连的名字能解析到 IP;
- 名称与 AD 中计算机对象匹配(尽量用 FQDN)。
当你用 IP/CNAME 别名 连接时,Kerberos 可能失败,有两个常见出路:
方案 A:HTTPS(-UseSSL)
-
准备服务器证书,证书主题必须匹配你连接用的 FQDN。
-
在目标机创建 WinRM HTTPS 监听(绑定证书)。
-
连接:
Enter-PSSession -ComputerName dc01.contoso.com -UseSSL -Credential (Get-Credential)
-Credential
在 SSL 场景通常是必需的。
方案 B:TrustedHosts(降低安全强度,限内网)
-
通过 GPO:计算机配置 → 管理模板 → Windows 组件 → Windows 远程管理(WinRM)→ WinRM 客户端 → 受信任的主机,设为
*.contoso.com,*.sales.contoso.com
等。 -
或本机设置:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*.contoso.com' -Force
-
连接时一般也要带
-Credential
。
对比:SSL 更安全、配置更繁;TrustedHosts 更轻、但放宽了对对端身份校验,适合受控内网。
5)练习:只暴露 Get-SmbShare
的端点
# 生成配置(Windows 8/Server 2012+ 才有 SMBShare)
New-PSSessionConfigurationFile `-Path .\SMBShareEndpoint.pssc `-ModulesToImport SmbShare `-SessionType RestrictedRemoteServer `-VisibleCmdlets 'Get-SmbShare','Get-Help','Get-Command','Exit-PSSession' `-CompanyName "My Company" `-Author "Jane Admin" `-Description "restricted SMBShare endpoint" `-PowerShellVersion '4.0'Register-PSSessionConfiguration -Path .\SMBShareEndpoint.pssc -Name TestPointEnter-PSSession -ComputerName localhost -ConfigurationName TestPoint
Get-Command # 仅看到受限命令
6)速查与避坑清单
- 注册/修改端点会重启 WinRM,可能短暂中断他人会话;生产环境先公告维护窗口。
- 防火墙端口:HTTP 5985、HTTPS 5986。
- 注册/设置端点需本地管理员权限;连接端点需在端点权限列表中(读+执行)。
- 模块必须存在于目标机;端点
-ModulesToImport
只会加载目标机已有模块。 - 多跳访问远端资源要用 CredSSP 或让远端脚本自己使用其有权的服务账户。
- SSL 场景确认证书主机名匹配你连接使用的名称。
- TrustedHosts 尽量精确到域/子域,避免
*
。
7)一段话总结
端点让你把“能做什么、以谁的身份做、谁能连”全部装进一个可复用的远程入口;CredSSP 解决了“第二跳”的老大难;双向认证默认靠 Kerberos,出域就走 SSL 或 TrustedHosts。用这些“高级把手”,你就能把 PowerShell 远程从“能连能跑”提升到“可控、可授、可审、可最小化授权”。