You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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自带的凭证管理工具,可以直接编辑缓存文件:

  1. 启动ktutil交互环境:
    ktutil
    
  2. 加载当前Kerberos缓存文件(路径从klist的Ticket cache行获取):
    rkt /tmp/krb5cc_1234
    
  3. 列出所有凭证条目,找到要删除的HTTP/some-host.my.domain@MY.REALM对应的编号:
    list
    
    输出会类似:
    slot KVNO Principal
    ---- ---- ---------------------------------------------------------------------
       1    2 krbtgt/MY.REALM@MY.REALM
       2    2 HTTP/some-host.my.domain@MY.REALM
    
  4. 删除目标条目(假设编号是2):
    delent 2
    
  5. 将修改后的缓存写回原文件:
    wkt /tmp/krb5cc_1234
    
  6. 退出ktutil:
    quit
    

方法二:重新获取TGT保留核心凭证(适合仅需保留TGT的场景)

如果你的需求只是保留TGT(krbtgt/MY.REALM@MY.REALM),可以直接销毁整个缓存后重新获取TGT:

  1. 销毁当前所有凭证:
    kdestroy
    
  2. 重新获取TGT:
    kinit myuser@MY.REALM
    
    执行后klist只会显示TGT条目,原HTTP凭证已被删除。

验证结果

执行完上述操作后,再次运行klist,确认HTTP/some-host.my.domain@MY.REALM条目已被移除。

内容的提问来源于stack exchange,提问作者levant pied

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:52:42