【发布时间】:2021-12-12 13:24:54
【问题描述】:
说明
我正在尝试运行一个多次运行需要 Kerberos 的脚本的脚本。 MainScript.sh 有一个循环,它将随着时间的推移多次启动ScriptUsingKerberos.sh(每天超过 600 次)。例如:
./MainScript.sh
|-- ScriptUsingKerberos.sh
|-- ScriptUsingKerberos.sh
|-- ...
\-- ScriptUsingKerberos.sh
ScriptUsingKerberos.sh - 检查我的 Kerberos 票证有效性的部分:
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 工作示例:
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
在这里我们可以看到一张票,所以我可以用 grep 来检查它的有效性
不工作的情况
但在某些时候,在多次成功执行后,我只得到:
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 票证的有效性?
【问题讨论】:
-
Kerberos 票据有两个值来定义它们的生命周期和可更新时间。请参阅:stackoverflow.com/a/15457265/7939871 一旦票证过期,它就不再在列表中,如果续订期限允许,您可以要求续订票证。您可能会让脚本将其当前票证存储在具有续订截止日期的文件中。在脚本启动时,检查保存的票证是否仍然有效,或者是否可以续订,如果没有,则请求新票证(这意味着用户重新进行身份验证)。