生产环境突然遇到kerberos 认证异常,java应用连接hive之前的认证异常
报Unable to obtain password from user
很常见的报错异常
一、排查证书
最开始怀疑证书的问题,对kerberos认证理解不深入,猜想大概证书异常
从服务器导出了新的证书,仍然不行,机器上没安装kerberos 客户端,所以证书导入其他有Hadoop的客户端的机器,验证了新证书没有问题
二、怀疑java应用的程序
因为是正常运行的时候突然不行了,不大可能是java 程序的问题,为了验证 特地写了一个demo 应用 部署了一下,发现仍然不行,这时候有点挑战了,
证书没问题,难道程序突然不行了
三、服务器环境排查
生产环境使用了华为的服务器,开始怀疑服务器环境导致,把验证程序部署到了通用服务器,结果验证通过,完全没有问题
定位到了服务器环境,又把验证程序部署到了另一台 华为服务器,验证了一下,发现可以,接下来对比两台服务器的差异
对比了基础配置,对齐了证书,用户
结果还是有一台验证不通过
这时候 想起来前一天 出问题的机器升级了jdk
难道jdk 会影响kerberos 认证过程。
网上搜索资料,发现部分资料提到jdk 版本会导致kerberos 认证异常
准备回退jdk,回退之后 发现认证成功
由于报错信息不明确,导致全程靠猜想
结论
当你遇到Unable to obtain password from user
时,写一个java demo 去不同环境测试 ,当确认证书没有问题,程序没有问题的时候,看看服务器环境jdk 版本。