第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)

发布于:2025-09-01 ⋅ 阅读:(21) ⋅ 点赞:(0)

第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)

这章的关键词:端点(Session Configuration)受限端点Register-PSSessionConfigurationCredSSP 多跳双向身份验证(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 TestPoint

Enter-PSSession -ComputerName localhost -ConfigurationName TestPoint
Get-Command   # 仅看到受限命令

6)速查与避坑清单

  • 注册/修改端点会重启 WinRM,可能短暂中断他人会话;生产环境先公告维护窗口。
  • 防火墙端口:HTTP 5985、HTTPS 5986。
  • 注册/设置端点需本地管理员权限;连接端点需在端点权限列表中(读+执行)。
  • 模块必须存在于目标机;端点 -ModulesToImport 只会加载目标机已有模块。
  • 多跳访问远端资源要用 CredSSP 或让远端脚本自己使用其有权的服务账户。
  • SSL 场景确认证书主机名匹配你连接使用的名称。
  • TrustedHosts 尽量精确到域/子域,避免 *

7)一段话总结

端点让你把“能做什么、以谁的身份做、谁能连”全部装进一个可复用的远程入口;CredSSP 解决了“第二跳”的老大难;双向认证默认靠 Kerberos,出域就走 SSLTrustedHosts。用这些“高级把手”,你就能把 PowerShell 远程从“能连能跑”提升到“可控、可授、可审、可最小化授权”。


网站公告

今日签到

点亮在社区的每一天
去签到