当前位置: 首页 > 面试题库 >

无法从Java自动更新Kerberos票证

裴华荣
2023-03-14
问题内容

在我的服务器应用程序中,我正在从Java应用程序连接到受Kerberos保护的Hadoop群集。在应用程序启动时,我会打电话给

UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );

我正在使用本机FileSystemAPI(例如FileSystem.exists()和)进行基本的File操作FileSystem.delete()

我的应用程序在24小时后引发以下错误。这就是Kerberos票证的到期日。

Caused by: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:690)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709)
        at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:653)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:740)
        at org.apache.hadoop.ipc.Client$Connection.access$2900(Client.java:378)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1492)
        at org.apache.hadoop.ipc.Client.call(Client.java:1402)
        ... 27 more
Caused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
        at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:413)
        at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:563)

我的应用程序使用Java 8,并且遇到了此错误。

但是,看起来我的应用程序使用的hadoop-
common-2.7.1.2.4.2.12-1.jar
已具有修复功能。来源可以在这里找到。

但是仍然出现相同的错误,因为没有进行自动续订。仅UserGroupInformation.checkTGTAndReloginFromkeytab()在按照上述答案中的建议在每个操作之前调用后才解决了此问题。但这仅在使用Rest
API而非RPC时才被建议,我希望本机Java API仅使用RPC。

为什么不按上述答案的建议进行自动续订?


问题答案:

不幸的是,使用此UserGroupInformation#loginUserFromKeytabAndReturnUGI方法时,存在自动更新无法正常工作的已知问题。我目前不知道Apache
Hadoop中的任何已知代码修复。

您添加呼叫的解决方案UserGroupInformation#checkTGTAndReloginFromKeytab是可行的解决方法。我建议您暂时坚持该做法,并关注Apache
Hadoop发行说明,以查看将来是否有修复程序提交。



 类似资料:
  • 我试图在使用JGit拉取回购时使用Kerberos身份验证,但出现以下错误: 来自Ticket Cache的空凭据 [Krb5LoginMoules]身份验证失败 这是我的登录名。形态 我使用自定义的JcshConfigSessionFactory和重写配置方法,如下所示 “klist”说凭证缓存是API(我在MacOS Sierra上)。我怎样才能克服这次失败?

  • 我们的hadoop集群使用kerberos,所以我们需要先使用kinit,然后使用类似“hadoop fs-ls/”的命令。现在我使用jaas和gssapi登录并在集群中创建文件,但失败了。这是我的代码: 贾斯。具体如下: 我的登录用户名是root,在使用“hadoop jar./client.jar”之前运行此代码,我运行kdestory删除kerberos缓存,然后我得到以下错误: 我不知道如

  • 我正试图更新作曲家没有任何运气! 我所尝试的: [InvalidArgumentExc0019]命令"自我更新"未定义。 [InvalidArgumentExc0019]命令"自我更新"未定义。 读取包裹列表...完成构建依赖树读取状态信息...完成作曲家已经是最新的版本。以下软件包已自动安装,不再需要:libntdb1 linux-Headers-4.2.0-30 linux-Headers-4

  • autoUpdater模块为Squirrel框架提供了一个接口。 进程: 主进程​ 您可以使用这些项目之一进行快速启动多平台发布服务器以分发应用程序: nuts:为您的应用程序使用智能版本服务器,使用GitHub作为后端。使用Squirrel(Mac和Windows)自动更新 electron-release-server:功能齐全,自主托管的electron应用程序的发布服务器,兼容自动更新器

  • 我试图将Thymeleaf电子邮件模板添加到一个工作的Spring MVC+Thymeleaf应用程序中,如下所述。 pom.xml: 服务类别:

  • 我们已经实现了Kerberos java客户端,它运行良好。然而,当kerberos票证过期时,Java客户端应用程序会在控制台中请求用户名,这反过来会使应用程序挂起。在SoapUI等工具中,我们观察到当Kerberos票证过期时,系统抛出未经授权的错误。我们希望实现类似的行为,即如果Kerberos票证过期,则应抛出未经授权的错误,而不是等待用户输入凭据。请帮忙。 为Kerberos测试设置客户