当前位置: 首页 > news >正文

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

第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 TestPointEnter-PSSession -ComputerName localhost -ConfigurationName TestPoint
Get-Command   # 仅看到受限命令

6)速查与避坑清单

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

7)一段话总结

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

http://www.dtcms.com/a/357136.html

相关文章:

  • 常见视频编码格式对比
  • GraphRAG 知识图谱核心升级:集成 langextract 与 Gemini ----实现高精度实体与关系抽取
  • 捡捡java——2、基础05
  • Redis不同场景下的注意事项
  • 如何在FastAPI中玩转全链路追踪,让分布式系统故障无处遁形?
  • 【golang长途旅行第34站】网络编程
  • c++ template
  • Vue2+Element 初学
  • LRU 内存淘汰策略
  • 【51单片机定时1秒中断控制流水灯方向】2022-11-14
  • Geocodify 的 API
  • 以技术赋能强化消费者信任,助推餐饮服务质量提质增效的明厨亮灶开源了
  • 有鹿机器人:用智能清洁重塑多行业工作方式
  • Centos卸载anaconda
  • 微服务Eureka组件的介绍、安装、使用
  • 音频转音频
  • 数据结构:快速排序 (Quick Sort)
  • 数据结构(C语言篇):(五)单链表算法题(上)
  • Linux笔记13——shell编程基础-7
  • More Effective C++ 条款16:牢记80-20准则(Remember the 80-20 Rule)
  • Java泛型使用常见报错
  • Stream API 讲解
  • 上传文件到本地
  • LeetCode Hot 100 第8天
  • 医疗 AI 的 “破圈” 时刻:辅助诊断、药物研发、慢病管理,哪些场景已落地见效?
  • 174. Java 注释 - 声明注释类型
  • 《AI智脉速递》2025 年 8 月22 日 - 29 日
  • VS2022+QT6.7+NetWork(TCP服务器多客户端助手)
  • Rust 登堂 之 深入Rust 类型(六)
  • 如何打造团队协作型 IP,而非单人依赖型?