Использование TGT, приобретенного в Java для SSH / других приложений - PullRequest
0 голосов
/ 20 октября 2011

В настоящее время я могу аутентифицировать пользователей в java-приложении, используя JAAS и получая билет для выдачи билетов, отправленный с сервера Windows, на котором работает Active Directory.Это легко сделать с помощью Krb5LoginModule в Java.

Теперь я хотел бы запустить команду ssh из моего java-приложения и использовать мой TGT, чтобы ssh не запрашивал пароль.Я видел несколько обучающих программ ( OpenSSH & Kerberos ) для того, чтобы заставить ssh работать с kerberos, но они используют kinit, чтобы получить их TGT, и билет хранится в / tmp / krbcc_XXX.Затем, после того, как билет сгенерирован, они могут свободно пользоваться ssh.

Я мог бы записать TGT на диск и сохранить его в / tmp / krbcc_XXX, или я мог запустить команду ssh в PrivilegedAction, однако я не знаю, сработает ли один из них.Есть ли приемлемый способ сделать это?

По сути, я хотел бы позвонить примерно так и не попросить у меня пароль:

// Create Command.
List<String> arguments = new ArrayList<String>();
arguments.addAll(Arrays.asList("ssh", "user@host", "xterm"));

// Run SSH command.
ProcessBuilder process = new ProcessBuilder(arguments).start();

1 Ответ

1 голос
/ 23 октября 2011

Вы должны сначала уточнить, кто будет инициировать запрос SSH. Java или базовая система Linux / Unix. Если вы пойдете с последним, это не кроссплатформенный и не способ Java. Вы должны использовать Java SSH ImpL, который поддерживает Keberos. Все должно идти гладко. JSch - это чистый Java-файл с поддержкой gss-api-with-mic.

С другой стороны, вы можете попытаться получить личные учетные данные из Subject, созданного с помощью LoginContext, и записать его в расположение файла CC по умолчанию. После того, как вы это сделали, попробуйте klist. Если он читает файл cc, все готово. Если это не работает, вы можете проверить код читателя Sun CC и повернуть его вспять. Возможно, sun.security.krb5.internal.ccache.FileCredentialsCache интересен наряду с его методами обновления и сохранения. Задача состоит в том, чтобы личные учетные данные субъекта были совместимы с требуемым классом sun.security.krb5.internal.ccache.Credentials. Примечание : Это решение полностью зависит от Солнца. Я бы выбрал первый подход, или вы сначала запустите kinit.

...