2017-10-16 17 views
0

Nous ne pouvons pas renouveler les billets d'utilisateur kerberos de keytab en utilisant le code java, alors qu'il travaille avec "kinit R"tickets Kerberos ne pas renouveler par le code Java pour les travaux de longue course

code:

UserGroupInformation loginUser = UserGroupInformation.getLoginUser(); loginUser.checkTGTAndReloginFromKeytab();

S'il vous plaît aidez-moi.

+0

Votre question n'est pas claire. S'agit-il du renouvellement du ticket, comme pour 'kinit -R', ou de la recréation de ticket, comme avec' kinit -kt 'ou avec la méthode '.checkTGTAndReloginFromKeytab()'? Et BTW votre formatage n'est pas approprié (c.-à-d. «Les extraits de code» ne sont pas supposés être ** gras **) –

+0

Quelques recherches sur Google et/ou StackOverflow vous auraient dit que l'implémentation Java de Kerberos est ** incomplète ** - - en particulier, Java ne peut pas créer de tickets renouvelables et ne peut pas écrire de tickets dans le cache de fichiers (bien qu'il puisse le lire). Hadoop utilise Java pour partager la plupart de ses limitations. Bien qu'il existe une solution sale pour renouveler les tickets préexistants dans le cache. –

+0

Lectures recommandées: https://stackoverflow.com/questions/33211134/hbase-kerberos-connection-renewal-strategy et https://stackoverflow.com/questions/34616676/should-i-call-ugi-checktgtandreloginfromkeytab-avant- Chaque action sur Hadoop. –

Répondre

0

Avez-vous effectué un kinit avant le début du processus? Seulement alors, il pourrait être renouvelé.

Le keytab est-il sous le même utilisateur que votre programme? c'est-à-dire que l'utilisateur a le droit de renouveler le keytab.

Quelle est la pile exacte?

Peut-être que cela fonctionnera pour vous, en pointant vers l'emplacement exact de votre keytab. Parce que quand vous faites un renouvellement quand il n'y a pas de keytab c'est bien sûr inutile.

import org.apache.hadoop.security.UserGroupInformation; 
org.apache.hadoop.conf.Configuration conf = new 
org.apache.hadoop.conf.Configuration(); 
conf.set("hadoop.security.authentication", "Kerberos"); 
UserGroupInformation.setConfiguration(conf); 
UserGroupInformation.loginUserFromKeytab("[email protected]", "/path/to/example_user.keytab"); 
+0

Oui, nous avons donné l'emplacement principal et keytab. et doit être renouvelé avec le même keytab et la méthode ci-dessous loginUser.checkTGTAndReloginFromKeytab(); Nous testons cette méthode va renouveler le billet quand nous appelons –

+0

Lorsque nous activons la trace, débogage et exécuter le porgram il est renouvelable faux, Mais nous sommes en mesure de voir renouvelable vrai lorsque nous faisons kinit à partir de l'invite de commande. est-il possible de définir "renewble true" en utilisant l'API java –