2014-02-18 3 views
0

я могу выполнить команду, используя мой керберос билет на сервере Kerberos, запустив SSH имя хоста LsВыполнить команду на Kerberos с помощью Java и билет

он использует керберос билет я получил раньше, запустив Kinit на клиенте ,

Я хочу сделать то же самое через java-клиент. У меня есть клиент, который может использовать SSH для этой машины, используя закрытый ключ или имя пользователя и пароль. Я хочу, чтобы клиент java использовал билет kerberos.

Как я могу это сделать?

ответ

1

Ну из того, что я понимаю ваше заявление проблемы является:

  1. Использования Kinit для создания кербероса билета
  2. Использование Java Client для отправки билета, сгенерированный для аутентификации

Я также предполагая, вы пишете код для java-клиента:

Ну в этом случае вы должны использовать jaas.conf

Образец JAAS конф: -

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

Set JAAS конф через системное свойство: -

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

Это позволит вам подобрать то, что определено в кэше учетных данных по умолчанию (в вашем случае это заполняется Kinit)

После того, как вы сделаете это: -

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

После этого использования Subject.doAs повышение привилегий и получить работу: -

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

Здесь YourAction класс можно определить (который должен реализовать PrivilegedExceptionAction) и в методе выполнения делать все, что вы хотите.

P.S В случае, если вы не «кодируете» ваш java-клиент, вам необходимо проверить документацию jaas соответствующего модуля и посмотреть, поддерживается ли это. Тогда все, что вам нужно сделать, это использовать файл jaas.conf, и вам хорошо идти.

P.S Вы можете избежать kinit все вместе, поставив useTicketCache = false и doNotPrompt = false. Затем вы можете указать пароль и имя пользователя в своем клиенте, и он получит вам билет.

P.S Пожалуйста, убедитесь, что вы определите свойство системы для krb5.conf для любого из этой работы: -D java.security.krb5.conf = krb5conffilepath

+0

Спасибо за ответ. Можете ли вы рассказать о том, как использовать PrivilegedExceptionAction? Я хочу запустить «ls» и вернуть результаты. –

+0

Это удаленный вызов ls? Если да, то вам нужно обратиться к соответствующему API Java для кода команды connect/run для связи SSH в методе запуска PrivilegedExceptionAction. Вероятно, вы можете взять имя команды и args в качестве аргументов конструктора для YourAction и передать его в код подключения. –

Смежные вопросы