我們無法續訂使用Java代碼從密鑰表Kerberos用戶車票,而它的工作與「使用kinit -R」Kerberos票據未能通過java代碼續約長時間運行的工作
代碼:
UserGroupInformation loginUser = UserGroupInformation.getLoginUser(); loginUser.checkTGTAndReloginFromKeytab();
請幫我一把。
我們無法續訂使用Java代碼從密鑰表Kerberos用戶車票,而它的工作與「使用kinit -R」Kerberos票據未能通過java代碼續約長時間運行的工作
代碼:
UserGroupInformation loginUser = UserGroupInformation.getLoginUser(); loginUser.checkTGTAndReloginFromKeytab();
請幫我一把。
在進程啓動之前你做了一個kinit嗎? 只有當它可以被更新。
您的程序運行在同一用戶下的keytab?即用戶是否有權更新密鑰表。
什麼是確切的堆棧跟蹤?
也許這會對你有用,指向你的密鑰表的確切位置。因爲當你沒有keytab時進行更新,這是毫無意義的。
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");
是的,我們給了主體和keytab位置。並需要使用相同的keytab和下面的方法loginUser.checkTGTAndReloginFromKeytab()更新;當我們調用 –
時,我們正在測試這個方法會更新票證當我們啓用跟蹤時,調試並運行波克圖時,它顯示的是可更新錯誤,但是當我們從命令提示符執行kinit時,我們能夠看到可更新爲真。有什麼方法可以使用java API設置「可更新」 –
您的問題不清楚。是否與'kinit -R'一樣關於票證更新,或重新創建票證,就像'kinit -kt'或者'.checkTGTAndReloginFromKeytab()'方法一樣?並且順便說一句你的格式不合適(即'代碼摘錄'不應該是**粗體**) –
對谷歌和/或StackOverflow的一些研究會告訴你Kerberos的Java實現是**不完整** - - 尤其是,Java不能創建可更新票據,並且不能將票據寫入文件緩存(儘管它可以讀取它)。 Hadoop使用Java,以便分享其大部分限制;儘管在緩存中更新預先存在的故障單有一個骯髒的修復程序。 –
推薦閱讀:https://stackoverflow.com/questions/33211134/hbase-kerberos-connection-renewal-strategy和https://stackoverflow.com/questions/34616676/should-i-call-ugi-checktgtandreloginfromkeytab-before-每一個動作上,Hadoop的。 –