Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java和票证在kerberos上执行命令_Java_Ssh_Kerberos - Fatal编程技术网

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

使用java和票证在kerberos上执行命令,java,ssh,kerberos,Java,Ssh,Kerberos,我可以通过运行以下命令在kerberos服务器上使用kerberos票证执行命令 ssh主机名ls 它使用我之前在客户机上运行kinit得到的kerberos票证 我想通过java客户机做同样的事情。我有一个客户端,可以使用私钥或用户名和密码SSH到该机器。 我希望java客户端使用kerberos票证 我该怎么做呢?据我所知,您的问题陈述是: 使用kinit生成kerberos票证 使用Java客户端发送为身份验证生成的票据 我还假设您正在为java客户端编写代码: 在这种情况下,您需要使用j

我可以通过运行以下命令在kerberos服务器上使用kerberos票证执行命令 ssh主机名ls

它使用我之前在客户机上运行kinit得到的kerberos票证

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


我该怎么做呢?

据我所知,您的问题陈述是:

  • 使用kinit生成kerberos票证
  • 使用Java客户端发送为身份验证生成的票据
  • 我还假设您正在为java客户端编写代码:

    在这种情况下,您需要使用jaas.conf

    Jaas配置示例:-

    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())
    
    在这里,您的Action是您定义的一个类(它必须实现PrivilegedExceptionAction),并在其run方法中执行您想执行的任何操作

    另外,如果您没有“编码”您的java客户机,您需要检查有问题的模块的jaas文档,看看它是否受支持。然后,您需要做的就是使用jaas.conf文件,就可以开始了

    另外,您可以通过将useTicketCache=false和doNotPrompt=false放在一起来避免纠结。然后你可以在你的客户机上指定密码和用户名,它就会给你开罚单


    另外,请确保为krb5.conf定义了系统属性,以使其工作:-D java.security.krb5.conf=krb5conffilepath

    感谢您的回复。你能详细说明一下如何使用PrivilegedExceptionAction吗?我想运行“ls”并返回结果。这是ls的远程调用吗?如果是,那么您需要在PrivilegedExceptionAction的run方法中查询用于SSH通信的connect/run命令代码的相应Java API。您可以将命令名和参数作为构造函数参数传递给操作,并将其传递给连接代码。