TrustedHosts 是什么
域环境下 PowerShell 远程管理用 Kerberos 认证,双方能互相验证身份;工作组或非域机器之间没有这套信任,只能退而求其次用 NTLM。NTLM 无法验证对端是否真的是那台机器,于是 Windows 要求你显式声明「我信任哪些主机」——这就是 TrustedHosts。它是可用性与安全性之间的妥协,配置原则很清楚:只列必要的主机。
基本信息
| 适用平台 | Windows 客户端与服务器(PowerShell 远程管理,WinRM) |
|---|---|
| 配置位置 | 发起方(客户端)的 WSMan:\localhost\Client\TrustedHosts |
| 查看 | Get-Item WSMan:\localhost\Client\TrustedHosts |
| 设置 | Set-Item WSMan:\localhost\Client\TrustedHosts -Value "host1,host2" -Concatenate -Force |
| 清空 | Clear-Item WSMan:\localhost\Client\TrustedHosts |
| 生效范围 | 只在发起方配置;目标机需要启用 WinRM 并放行相应端口 |
| 更稳妥方案 | HTTPS 监听器 + 证书,或把机器加入域使用 Kerberos |
典型使用场景
- 工作组实验室:几台非域测试机互相远程执行脚本
- 跨域带外管理:临时管理不属于当前域的机器
- 应急通道:域信任出现问题时保留一条可用的远程管理路径
- 自动化验证:在受控环境快速搭建脚本执行链路
- 基线检查:核对 TrustedHosts 是否被清空或只保留了必要条目
常用示例
常用示例
Get-Item WSMan:\localhost\Client\TrustedHosts # 查看当前信任清单
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'SRV02' -Concatenate -Force # 追加单台主机
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'SRV03,10.0.0.15' -Concatenate -Force # 追加多台
# 不加 -Concatenate 会覆盖整个清单,务必确认
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '10.0.0.15' -Force
Clear-Item WSMan:\localhost\Client\TrustedHosts # 清空(安全基线推荐状态)
# 目标机侧:启用远程管理并确认监听器
Enter-PSSession -ComputerName SRV03 -Credential (Get-Credential)
Invoke-Command -ComputerName SRV03 -ScriptBlock { hostname }认证方案对照
| 方案 | 信任基础 | 适用与代价 |
|---|---|---|
| Kerberos(域内) | 域控签发的票据 | 首选;无需 TrustedHosts |
| NTLM + TrustedHosts | 人工声明信任的主机 | 工作组场景可用;凭据可能被恶意端获取 |
| HTTPS + 证书 | 服务器证书校验 | 跨网络与不可信网络的推荐方案 |
| 入域后使用域账户 | 域信任链 | 长期方案,避免临时妥协配置 |
TrustedHosts 只在发起方生效:如果你从 A 连 B,需要在 A 上配置信任 B,而不是在 B 上配置。把这层关系搞反是初次使用时最常见的困惑。
目标机需要先具备远程管理条件:启用 WinRM(Enable-PSRemoting -Force)、对应服务运行、防火墙放行相应端口;TrustedHosts 只解决认证信任,不负责打通网络与服务。
更稳的替代做法
更稳的替代做法
# 启用远程管理(目标机,需管理员)
Enable-PSRemoting -Force
Get-NetFirewallRule -DisplayGroup 'Windows 远程管理' | Select-Object DisplayName, Enabled, Direction # 核对防火墙规则
# 配置 HTTPS 监听器(需事先准备服务器证书)
# New-WSManInstance -ResourceURI winrm/config/Listener -SelectorSet @{Address='*';Transport='HTTPS'} -ValueSet @{CertificateThumbprint='证书指纹'}
# 验证连接与协议
# Test-WSMan -ComputerName SRV03
# $s = New-PSSession -ComputerName SRV03 -UseSSL -Credential (Get-Credential)把 TrustedHosts 设为 * 等于信任任何主机:NTLM 凭据可能被伪造的对端截获,安全审计会直接判为高风险项。若确需大范围管理,改用 HTTPS + 证书或把设备纳入域。