2011-10-20 78 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

相关问题