查看和维护 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
-A 添加后出现间歇性 401 → -A 不查重,产生重复 SPN → 用 setspn -X 找出重复项,保留正确账户并删除其余。setspn -Q HTTP/实际访问名 验证,并统一使用 FQDN。setspn -S 恢复,并检查是否误删了主机名或端口变体。setspn -Q 定位后迁移,避免在两个账户同时保留。setspn 提示找不到命令或拒绝访问 → 未装 RSAT 或权限不足 → 在 DC/管理机安装 AD DS 工具,并使用有委派权限的账户。klist purge,再重新访问服务。whoami — 确认服务账户上下文nslookup — 核对客户端实际解析的主机名-S 而不是 -A?-S 会先查重,避免把同一 SPN 加到多个账户;-A 直接写入,容易制造重复。setspn -L 输出;回滚用 setspn -S 把原 SPN 加回正确账户。
小程序版
微信扫码,随时查命令