kerberos GSS initiate failed认证失败的原因及解决方案
2023-12-29 23:37:27
问题背景
GSS initiate failed: No valid credentials provided Failed to find any kerberos tgt
当同一OS用户并发执行多个认证脚本时,可能会遇到认证失败的问题,表现为GSS Initiate Failed等错误
问题原因
在典型的任务调度场景中,多个任务可能被同一用户同时调度执行。这就导致同一任务可能会并发执行kinit操作,而 kerberos Ticket Cache文件存储在/tmp目录下,文件名为krb5cc_{uid},其中uid为用户标识号。因为同一OS用户下的多个脚本共享相同的uid,由于并发kinit操作,不同的认证会覆盖同一个uid下的Ticket Cache文件,导致Kerberos认证信息串掉。后续任务使用覆盖的Cache文件,导致认证失败。
解决方案
指定独立的Ticket Cache文件:
通过在Shell脚本中设置KRB5CCNAME
环境变量,通过指定KRB5CCNAME
环境变量为每个Kerberos用户指定独立的Ticket Cache文件,解决并发执行脚本时Ticket Cache文件被覆盖的问题。
export KRB5CCNAME=/tmp/xxx_krb5c
kinit -kt /path/xxx/keytab user_name
拓展
- 使用唯一标识生成文件名: 在生成Ticket Cache文件名时,考虑使用唯一标识,如进程ID(PID),以确保每个脚本生成的文件名是唯一的,避免文件覆盖问题。
- 动态生成配置文件: 在脚本中动态生成Kerberos配置文件,通过设置
KRB5_CONFIG
环境变量,指定不同的配置文件路径,以避免多个脚本之间的配置信息冲突。
文章来源:https://blog.csdn.net/qq_19933029/article/details/135296316
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!