描述
我正在尝试运行一个脚本,它多次运行一个需要Kerberos的脚本。MainScript.sh有一个循环,它将在一段时间内多次启动ScriptUsingKerberos.sh (每天超过600次)。例:
./MainScript.sh
|-- ScriptUsingKerberos.sh
|-- ScriptUsingKerberos.sh
|-- ...
\-- ScriptUsingKerberos.shScriptUsingKerberos.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在这里,我们可以看到一张票,所以我可以用它来检查它的价值。
不工作案件
但在经历了多次成功的处决之后,我只得到了:
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票证的有效性,并且退出猜测是错误的。
问题
发布于 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的操作系统上安装它。kinit的cronjob。这在任何地方都有用。gss-proxy。这是Linux特有的。KRB5_CLIENT_KTNAME=,libkrb5本身将在需要时获取票证。这需要一个最近的麻省理工学院Krb5 -您的可能太老了(从它仍然有Kerberos 4支持的事实来判断)。哦,如果您选择使用kinit,那么仅仅询问klist -s这些票是否有效可能会更容易:
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
fihttps://stackoverflow.com/questions/69735507
复制相似问题