如何从Kerberos缓存中删除单个主体?kdestroy -p失败的解决方法
如何删除Kerberos缓存中的单个凭证条目?
我的Kerberos缓存里有多个凭证,用klist查看结果如下:
$ klist Ticket cache: FILE:/tmp/krb5cc_1234 Default principal: myuser@MY.REALM Valid starting Expires Service principal 04/21/2024 23:51:59 04/22/2024 02:37:58 krbtgt/MY.REALM@MY.REALM renew until 04/22/2024 23:51:46 04/21/2024 23:51:57 04/22/2024 02:37:58 HTTP/some-host.my.domain@MY.REALM renew until 04/22/2024 23:51:46
我想删除其中HTTP/some-host.my.domain@MY.REALM这个条目,但执行kdestroy -p HTTP/some-host.my.domain@MY.REALM失败,提示找不到匹配的凭证:
$ kdestroy -p HTTP/some-host.my.domain@MY.REALM kdestroy: Matching credential not found while finding cache for HTTP/some-host.my.domain@MY.REALM
问题原因
kdestroy -p参数的作用是销毁指定客户端主体的整个缓存,而非单个服务凭证。你传入的是服务主体,所以命令无法匹配到对应的缓存条目。
解决方案
方法一:用ktutil工具精准删除单个条目(推荐)
ktutil是MIT Kerberos自带的凭证管理工具,可以直接编辑缓存文件:
- 启动
ktutil交互环境:ktutil - 加载当前Kerberos缓存文件(路径从
klist的Ticket cache行获取):rkt /tmp/krb5cc_1234 - 列出所有凭证条目,找到要删除的
HTTP/some-host.my.domain@MY.REALM对应的编号:
输出会类似:listslot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 2 krbtgt/MY.REALM@MY.REALM 2 2 HTTP/some-host.my.domain@MY.REALM - 删除目标条目(假设编号是2):
delent 2 - 将修改后的缓存写回原文件:
wkt /tmp/krb5cc_1234 - 退出
ktutil:quit
方法二:重新获取TGT保留核心凭证(适合仅需保留TGT的场景)
如果你的需求只是保留TGT(krbtgt/MY.REALM@MY.REALM),可以直接销毁整个缓存后重新获取TGT:
- 销毁当前所有凭证:
kdestroy - 重新获取TGT:
执行后kinit myuser@MY.REALMklist只会显示TGT条目,原HTTP凭证已被删除。
验证结果
执行完上述操作后,再次运行klist,确认HTTP/some-host.my.domain@MY.REALM条目已被移除。
内容的提问来源于stack exchange,提问作者levant pied
相关产品推荐
相关产品推荐

