系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

setspn

查看和维护 AD 服务主体名称,修复 Kerberos 认证与重复 SPN 问题。

补充说明

SPN 把服务实例映射到运行该服务的账户。客户端访问 HTTP/web.contoso.com 时,先用这个名称向 KDC 申请票据;SPN 缺失会退回 NTLM,SPN 重复则可能拿到错误账户的票据,表现为 401、登录循环或“无法访问”。

setspn 随 AD DS 工具/RSAT 安装,需提升权限;修改 SPN 要有目标账户的写权限,通常由域管理员或委派管理员执行。-L 列表、-Q 查询、-X 查重是只读;-S 添加、-D 删除会立即写入 AD 并复制。

Windows Server 2016+ 仍以 setspn.exe 为主。PowerShell 可用 Set-ADUser -ServicePrincipalNames 或 Set-ADComputer,但批量查重时 setspn -X 更直观。

常用示例

# 列出服务账户已注册的 SPN
C:\> setspn -L CONTOSO\svc-web

# 在全林中查询某个 SPN 属于哪个账户
C:\> setspn -Q HTTP/web.contoso.com

# 检查全林重复 SPN,重复项会导致 Kerberos 票据指向错误账户
C:\> setspn -X

# 影响范围:向 AD 写入 SPN,若与现有 SPN 冲突会影响该服务的认证
# 备份/回滚:先 setspn -L 记录原值;用 -S 添加(自动查重),失败时用 -D 撤销
C:\> setspn -S HTTP/web.contoso.com CONTOSO\svc-web

# 影响范围:删除后使用该 SPN 的 Kerberos 认证立即失败,可能退回 NTLM 或直接 401
# 备份/回滚:删除前保存 setspn -L 输出;回滚用 setspn -S 把原 SPN 加回
C:\> setspn -D HTTP/web.contoso.com CONTOSO\svc-web

# 修改后复核,确认没有多余或拼写错误的条目
C:\> setspn -L CONTOSO\svc-web

易错点与排错

相关命令

参考链接

读完自测

  1. 为什么添加 SPN 应优先用 -S 而不是 -A?
  2. 重复 SPN 会导致什么现象?
  3. 删除 SPN 前应该保存什么,回滚用什么命令?
答案
  1. -S 会先查重,避免把同一 SPN 加到多个账户;-A 直接写入,容易制造重复。
  2. 客户端可能拿到错误账户的 Kerberos 票据,表现为 401、登录循环或服务认证失败。
  3. 先保存 setspn -L 输出;回滚用 setspn -S 把原 SPN 加回正确账户。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令