使用java和票证在kerberos上执行命令

时间:2014-02-18 20:35:45

标签: java ssh kerberos

我可以通过运行在kerberos服务器上使用我的kerberos票执行命令 ssh hostname ls

它使用我之前通过在客户端运行kinit获得的kerberos票。

我想通过java客户端做同样的事情。我有一个客户端可以使用私钥或用户名和密码SSH到该计算机。 我希望java客户端使用kerberos票证。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

根据我的理解,您的问题陈述是:

  1. 使用kinit生成kerberos票证
  2. 使用Java客户端发送为身份验证生成的票证
  3. 我也假设你正在为java客户端编写代码:

    那么你可以使用jaas.conf

    示例Jaas conf: -

    com.sun.security.jgss.krb5.initiate {
         com.sun.security.auth.module.Krb5LoginModule required
         isInitiator=true
         useTicketCache=true
         doNotPrompt=true;
    };
    

    通过系统属性设置jaas conf: -

    -Djava.security.auth.login.config=jaasconffilepath
    

    这将允许您选择默认凭据缓存中定义的任何内容(在您填充kinit的情况下)

    执行此操作后: -

    LoginContext lc = new LoginContext();
    lc.login()
    

    在此之后使用Subject.doAs来提升特权并完成工作: -

    Subject.doAs(lc.getSubject(), new YourAction())
    

    这里YourAction是你定义的一个类(必须实现PrivilegedExceptionAction),并且在run方法中做你想做的任何事。

    P.S如果您没有“编写”您的Java客户端,您需要检查相关模块的jaas文档,看看它是否受支持。然后你需要做的就是使用你的jaas.conf文件,你就可以了。

    P.S你可以通过使用useTicketCache = false和doNotPrompt = false来避免使用kinit。然后,您可以在客户端中指定密码和用户名,它将为您提供票证。

    P.S请确保为krb5.conf定义系统属性,以使其中任何一个工作:-D java.security.krb5.conf = krb5conffilepath