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

拓展

  1. 使用唯一标识生成文件名: 在生成Ticket Cache文件名时,考虑使用唯一标识,如进程ID(PID),以确保每个脚本生成的文件名是唯一的,避免文件覆盖问题。
  2. 动态生成配置文件: 在脚本中动态生成Kerberos配置文件,通过设置KRB5_CONFIG环境变量,指定不同的配置文件路径,以避免多个脚本之间的配置信息冲突。

文章来源:https://blog.csdn.net/qq_19933029/article/details/135296316
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。