我可以通过运行在kerberos服务器上使用我的kerberos票执行命令 ssh hostname ls
它使用我之前通过在客户端运行kinit获得的kerberos票。
我想通过java客户端做同样的事情。我有一个客户端可以使用私钥或用户名和密码SSH到该计算机。 我希望java客户端使用kerberos票证。
我该怎么做?
答案 0 :(得分:2)
根据我的理解,您的问题陈述是:
我也假设你正在为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