清理kerberos票据缓存需三步:先用klist/klist -e/klist -a诊断过期、加密不匹配或残留票据;再按场景精准purge或kdestroy清除;最后校准default_realm、ticket_lifetime和default_tgs_enctypes,并用curl或ssh验证协议交互。
清理 kerberos 票据缓存不是简单删掉就完事,关键在“清得准、配得对、验得真”。缓存里混入过期、加密类型不匹配或签名异常的票据,会反复触发认证降级和重试,导致登录卡顿、报错(如 0x8009030e 或 kdc reply did not match expectations),而表面看 klist 还显示“正常”。
先确认票据是否真的“带病”
别跳过诊断,直接 purge 可能掩盖真实问题:
- 运行 klist,重点看 Expires 时间——已过期,或只剩几分钟(即使未过,时钟偏差 >5 分钟也会被 KDC 拒绝)
- 执行 klist -e,检查 Etype 字段:若显示
rc4-hmac,但域策略已禁用 RC4,该票据实际不可用 - Windows 下运行 klist -li 0x3e7,Linux/macOS 下运行 klist -A,排查是否存在多个会话残留票据(如远程桌面、计划任务、服务账户留下的旧 TGT)
按场景精准清除,避免误伤
不同上下文票据归属不同,清除方式必须匹配:
- Windows 普通用户会话:以当前用户身份运行 klist purge,无需管理员权限,只清本会话票据
- Windows 服务上下文(如 SQL Server Agent、IIS 应用池):需用 psexec -s -i cmd 切换到系统会话,再执行 klist purge
- Linux/macOS:先查缓存路径——echo $KRB5CCNAME;若为空,用 klist 2>/dev/null | grep 'Default cache' 辅助定位;再执行 kdestroy -c FILE:/tmp/krb5cc_1001(替换为实际路径)
- 绝对避免脚本中写 kdestroy -A:它会清空所有缓存,可能让后台定时任务静默失败
重建票据前必须校准三项配置
清除后仅输密码重登录,很可能拿到“看似有效、实则受限”的票据。需确保客户端配置与域策略一致:
-
default_realm 必须全大写、精确匹配(如
EXAMPLE.COM),大小写错误会导致 TGT 请求被 KDC 直接拒绝 -
ticket_lifetime 建议设为
8h起步;设为24h+易被域策略拦截 -
default_tgs_enctypes 必须包含域允许的最强加密类型,例如
aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96,且 AES256 应排在前面
验证是否真正修复,而非仅看时间戳更新
klist 显示新时间不代表认证链已通。必须触发一次完整协议交互:
- Windows:用 curl --negotiate -u : https://api.example.com 访问支持 SPNEGO 的接口
- Linux:用 ssh -K user@host.example.com 尝试免密登录目标服务器
- 若返回 200 或成功建立 SSH 连接,说明票据已可被服务端正常解密并授权;仅 klist 有票 ≠ 认证成功











