[INFO] 2022-12-29 16:24:26.021 - [taskAppId=TASK-678-305576-2357578]:[127] - -> workspace /data/DATA_DIR/share/dw_ia_portraitsearch
kinit -kt /data/DATA_DIR/share/keytab/hive.keytab hive@CDP.COM
kinit: Failed to store credentials: Internal credentials cache error (filename: /tmp/krb5cc_1006) while getting initial credentials
脚本在执行kinit的过程中 报错,注意 这个错是随即错,也就是有时候会出现,有时候不会出现。
出现原因也很简单,就是多个任务同时执行kinit。。。
网上看到的大多文章都是起源这篇
Parallel kinit calls lead to a corrupted Kerberos cache - Stack Overflow
当时出了这个问题后,我看小组里的用到了这个办法
export KRB5CCNAME=tmp/krb5cc_`date +%m%d%H%M%S%N`
指定了一个环境变量有什么用吗? 我暂时是感觉不到,但是别人说有用,也许有点,开始研究下,见到了这篇文章。
Kerberos kinit crontab定时任务不生效的问题解决 - 一杯半盏 - 博客园
我们linux常规认证kerberos 一般都是
kinit -kt /data/DATA_DIR/share/keytab/hive.keytab hive@CDH.COM
kinit -kt /data/DATA_DIR/share/keytab/hive.keytab hive-- 可以省略后面的realm
那么我们认证了这个会发生那些物理变化?
通过klist可以看到生成了一个cache /tmp/krb5cc_1000,其中后缀1000也就是devuser的uid ,我们在tmp目录下就看到了这个。
先不讨论上面的问题。我们来测试一下。
同时开两个窗口a b 登录用户都是devuser
然后窗口a,kinit 认证,b能否直接hdfs dfs -ls /
kinit -kt /data/DATA_DIR/share/keytab/hive.keytab hive
可以看到左边显示kdestroy了,右边klist 确实没了,然后左边认证,右边可以hdfs dfs -ls/ 成功。
这个说明什么问题? 当我们devuser认证了,那么其他用户在使用devuser的时候都是有权限的,即使我现在再重新开一个窗口。
这样好吗?不好!!!但是无所谓,没人会在意这细节,能够认证已经花费我们的大部分精力了,还想要我咋样???但是今天没事就研究下。
比如现在有这种要求,生产环境只给大家一个devuser的用户去登录,并且按照良好习惯要求大家kinit认证使用完了之后即使kdestroy。
那么会出现 a 登录后 kinit 开始做xxxxxx ,
这时b也登录devuser ,但是b发现klist有人已经认证了,那b怎么办,(b现在也可以hdfs dfs -ls )
但是呢 万一我工作了一半,此时a工作完了kdestroy了 我怎么办?
上一秒我还可以好好干活 下一秒我就不能干活了。 有人又说了你重新认证下步就好了吗?
确实是,但是我重新认证的过程中,万一又来了个c,和我同样的遭遇呢?
又有人说不destroy不就好了?一般认证可以管一天 续期7天,七天认证下,不也可以么?问题的关键是 你这样一直认证确实可以解决,但是我们使用kerberos的目的就是安全,你这样一直认证,等于说别人只要知道了你devuser的密码就可以(等你认证或有效期内)在hdfs上为所欲为 ,而之前他需要kinit,他需要知道keytab的位置和principal。
所以其实最好的办法是一人一个账号 一个keytab
或者就是 每个人使用不同的缓存去认证,你destroy是去掉自己的缓存而我不受影响。
左边还是认证的krb5cc_1000, 右边认证的krb5cc_devuser 我们自己搞得一个cache。两者互不干扰,左边destroy了右边还是可以的。
所以同事的那种export KRB5CCNAME=tmp/krb5cc_`date +%m%d%H%M%S%N` 是可行的。
但是真的需要这个么?
我们的脚本都是通过dolphin去调用shell,dolphin的用户对应的租户都是producer,就是说只有一个用户,但是有成千上万个任务,真的需要全部都kinit一遍吗?
文章来源地址https://www.toymoban.com/news/detail-539848.html文章来源:https://www.toymoban.com/news/detail-539848.html
到了这里,关于kinit: Failed to store credentials: Internal credentials cache error (filename: /tmp/krb5cc_1006)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!