[已解决] [HiveCatalog]Kerberos GSS initiate failed, No valid credentials provided, Cannot read from System.in
问题说明
部署一个连接Hive的Java应用程序,遇到这个Kerberos报错的问题,查了一天,记录一下
问题现象
- Kerberos GSS initiate failed
- No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null))
- Cannot read from System.in
javax.security.sasl.SaslException: GSS initiate failed
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211) ~[na:1.8.0_351]
at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94) [hive-exec-1.1.0-cdh5.12.1-slankka.jar:1.1.0-cdh5.12.1]
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271) ~[hive-exec-1.1.0-cdh5.12.1-slankka.jar:1.1.0-cdh5.12.1]
at .....
at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_351]
Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null))
at sun.security.jgss.krb5.Krb5InitCredential.getTgt(Krb5InitCredential.java:386) ~[na:1.8.0_351]
... 44 common frames omitted
Caused by: javax.security.auth.login.LoginException: Cannot read from System.in
at com.sun.security.auth.module.Krb5LoginModule.promptForName(Krb5LoginModule.java:871) ~[na:1.8.0_351]
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:710) ~[na:1.8.0_351]
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617) ~[na:1.8.0_351]
分析直接原因
KRB5CCNAME 这个环境变量被改了,与实际的KRB5CCNAME不一致。
实际的 KRB5CCNAME 已经在 hue 的 ~/.bashrc 中设置,同时 /etc/krb5.conf 中也设置了 default_ccache_name 的格式 不应该是带有随机字符串。
[libdefaults]
default_ccache_name = FILE:/opt/userdata/krb5cache/%{uid}/krb5cc_%{uid}
最终原因
启动的脚本有错,结果发现是 if [ ] 表达式有错。
完整脚本参见:
Github Gist
完整文章参见:
Github Gist
结论
曾经怀疑过 su 是不是不支持 KERBEROS 相关的认证,结果证明是没问题的
只要认准 KRB5CCNAME 变量设置正确,就不会有问题。
最坑的是 Linux shell 语法,从 chatGPT 上复制尤其需要注意

浙公网安备 33010602011771号