首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kerberos klist没有显示任何票子。

Kerberos klist没有显示任何票子。
EN

Stack Overflow用户
提问于 2021-10-27 08:47:35
回答 1查看 1.4K关注 0票数 1

描述

我正在尝试运行一个脚本,它多次运行一个需要Kerberos的脚本。MainScript.sh有一个循环,它将在一段时间内多次启动ScriptUsingKerberos.sh (每天超过600次)。例:

代码语言:javascript
复制
./MainScript.sh
|-- ScriptUsingKerberos.sh
|-- ScriptUsingKerberos.sh
|-- ...
\-- ScriptUsingKerberos.sh

ScriptUsingKerberos.sh -部分检查我的Kerberos票证有效性:

代码语言:javascript
复制
echo " INFO: Checking the validity of your last Kerberos ticket..."
if ! klist 2>&1 | grep -q "${USER_NAME}@${DOMAIN}"
then
    echo "ERROR: User ${USER_NAME} do not match user listed in 'oklist' command, aborting."
    exit 1
fi

aKerberosExpirationDate="$(klist 2>&1 | tr '[:blank:]' ' ' | grep -o '[[:blank:]][0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9][[:blank:]][[:blank:]]*oracle' | sed 's/oracle//g' | sed 's/^[[:blank:]]*//g' | sed 's/[[:blank:]]*$//g' | sed -r 's;([0-9][0-9])/([0-9][0-9])/([0-9][0-9]);20\3-\1-\2;g' | while IFS= read -r aLine; do date +%s -d "${aLine}"; done | sort -n | head -n 1)"
aNowDate=$(date +%s)
if [[ -z "${aKerberosExpirationDate}" || ${aKerberosExpirationDate} -le ${aNowDate} ]]
then
    if ! 2>/dev/null 1>&2 kinit "${USER_NAME}@${DOMAIN}" <<< "${USER_PASSWORD}"
    then
        echo "ERROR: Your password in ${FILE_PWD} file seems incorrect or Kerberos token reset failed"
        exit 1
     fi
fi

工作箱

所以这个很好用。klist工作实例:

代码语言:javascript
复制
Ticket cache: FILE:/tmp/krb5cc_8522420
Default principal: ********@******.***

Valid starting     Expires            Service principal
10/27/21 08:42:08  10/27/21 18:42:08  krbtgt/********@******.***@********@******.***
        renew until 10/28/21 08:42:08
01/01/70 00:00:00  01/01/70 00:00:00  krb5_ccache_conf_data/pa_type/krbtgt\/********@******.***\@********@******.***@X-CACHECONF:
10/27/21 08:42:08  10/27/21 18:42:08  oracle/********@********@******.***
        renew until 10/28/21 08:42:08


Kerberos 4 ticket cache: /tmp/tkt8522420
klist: You have no tickets cached

在这里,我们可以看到一张票,所以我可以用它来检查它的价值。

不工作案件

但在经历了多次成功的处决之后,我只得到了:

代码语言:javascript
复制
Kerberos Utilities for Linux: Version 18.0.0.0.0 - Production on 27-OCT-2021 08:10:17

Copyright (c) 1996, 2017 Oracle.  All rights reserved.

然后,我无法检查Kerberos票证的有效性,并且退出猜测是错误的。

问题

  • 为什么klist不再显示任何门票了?
  • 这是正常的行为吗?
  • 是否有办法继续显示过时的票,像以前一样用klist?
  • 是否有任何重新设置Kerberos票证的守护进程/程序有效?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-02 18:51:43

为什么klist不再显示任何门票了?

这实际上让我怀疑您有两套Kerberos工具--即麻省理工学院的klist和Oracle的klist (我不知道它的存在!)在不同的地方。

但是您应该进一步研究:让脚本记录$KRB5CCNAME$PATH的值以及which klist返回的完整路径,并查看它们是否在某个时候发生了变化。(例如,您的脚本可能更改了$PATH,突然发现了与以前不同的“klist”工具,而其他klist使用了不兼容的票证缓存格式。)

是否有办法继续显示过时的票,像以前一样用klist?

一直都是。如果票消失了,这意味着有什么东西删除了它们(当然不是klist),或者您正在查看一个与以前完全不同的凭据缓存。

是否有任何重新设置Kerberos票证的守护进程/程序有效?

是的,有多个选项,虽然它们通常需要你有一个键签而不是密码。(服务,甚至那些充当客户的服务,通常都有键标签。)

  • 使用k5start或来自起跳krenew。前者用于获取票证并立即启动客户端(只要程序运行,它将继续更新票证),而后者可用于维护手动获取的票证。这是相当可移植的;您应该能够在任何Linux或类似Unix的操作系统上安装它。
  • 使用一个每3小时左右调用一次kinit的cronjob。这在任何地方都有用。
  • 将票证管理委托给gss-proxy。这是Linux特有的。
  • 如果使用MIT Krb5,使用keytab路径导出KRB5_CLIENT_KTNAME=,libkrb5本身将在需要时获取票证。这需要一个最近的麻省理工学院Krb5 -您的可能太老了(从它仍然有Kerberos 4支持的事实来判断)。

哦,如果您选择使用kinit,那么仅仅询问klist -s这些票是否有效可能会更容易:

代码语言:javascript
复制
if klist -5 -s; then
    echo "I have a valid TGT, continuing."
    # (Of course, it could be valid for only 5 seconds, but you're currently
    # not checking for that anyway.)
else
    echo "I don't have a valid TGT, trying to get one using a keytab."
    if ! kinit -k -t "$keytab_path"; then
        echo "Failed to get a TGT!"
        exit 1
    fi
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69735507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档