2011-10-20 33 views
0

目前,我能夠通過使用JAAS來驗證Java應用程序中的用戶,並獲取從運行Active Directory的Windows服務器發送的票據授予票據。這很容易用java中的Krb5LoginModule完成。使用在Java中爲SSH /其他應用程序獲取的TGT

現在我想從我的Java應用程序運行ssh命令並使用我的TGT來啓用ssh而不要求輸入密碼。我看到一些教程(OpenSSH & Kerberos)讓ssh與kerberos一起工作,但他們使用kinit來獲得他們的TGT,並且票證存儲在/ tmp/krbcc_XXX中。然後,票證生成後,他們可以自由地ssh。

我可以將TGT寫入磁盤並將其存儲在/ tmp/krbcc_XXX中,或者我可以在PrivilegedAction中運行ssh命令,但是我不知道是否可以工作。有沒有一種可接受的方式來做到這一點?

基本上,我想打電話給這樣的事情,並把它別問我密碼:

// Create Command. 
List<String> arguments = new ArrayList<String>(); 
arguments.addAll(Arrays.asList("ssh", "[email protected]", "xterm")); 

// Run SSH command. 
ProcessBuilder process = new ProcessBuilder(arguments).start(); 

回答

1

你必須先弄清楚誰將會發起的SSH請求。 Java或底層的Linux/Unix系統。如果你使用後者,這不是跨平臺的,而是Java的方式。您應該使用支持Keberos的Java SSH impl。一切都應該順利。 JSch是一個支持gss-api-with-mic的純Java impl。

在另一方面,你可以嘗試從與LoginContext創建Subject私有憑證,並將其寫入到默認CC文件位置..你已經做了之後,請klist。如果它讀取cc文件,你就完成了。如果這不起作用,您可以檢查Sun的CC reader code並將其撤銷。 sun.security.krb5.internal.ccache.FileCredentialsCache可能是有趣的一個,其更新和保存方法。任務是讓私人學科證書與期望的課程sun.security.krb5.internal.ccache.Credentials兼容。 注意:該解決方案完全依賴於Sun。我會選擇第一種方法,或者您首先運行kinit

相關問題