2016-07-21 7 views
7

documentation, описывающий, как для подключения к конечной точке, обеспеченным Kerberos показывает следующее:При использовании --negotiate with curl, требуется файл keytab?

curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..." 

Флага -u должен быть обеспечен, но игнорируется завитком.

Опция --negotiate вызывает завиток для поиска ключевой строки, которая была создана заранее командой kinit, или будет завивать запрос на учетные данные?

Если он ищет файл keytab, то какое имя файла будет искать команда?

+1

curl пытается получить действительный билет ** в кеше ** (ср., Переменная env 'KRB5CCNAME' или по умолчанию' FILE:/tmp/krb5cc _ $ (id -u) 'в Unix /' API: 'on Windows) - все равно, как был создан билет. –

+0

Предостережение: версии curl для Windows скомпилированы для поддержки библиотек Microsoft SSPI, а не библиотек GSSAPI, которые требуются службами Hadoop REST. –

+0

BTW a keytab - это файл, содержащий хешированный пароль, созданный 'ktutil' на Linux или утилитой Active Directory, например' ktpass.exe'. ** ** используется ** kinit', а не ** созданный **. –

ответ

16

Быть одноразовым участником curl в этой области. Вот что вам нужно знать:

curl(1) сам ничего не знает о Kerberos и не будет взаимодействовать ни с вашим кешем учетных данных, ни с вашим файлом keytab. Он будет делегировать все вызовы реализации GSS-API, которые сделают вам волшебство. Какая магия зависит от библиотеки, Heimdal и MIT Kerberos.

Основываясь на вашем вопросе, я предполагаю, что у вас мало знаний о Kerberos и вы хотите просто автоматизировать обращения API к конечным точкам REST, защищенным SPNEGO.

Вот что вам нужно сделать:

  1. Есть Unix-подобной ОС
  2. Установка по крайней мере, MIT Kerberos 1,11
  3. Установите по крайней мере curl 7.38.0 против MIT Kerberos
  4. Проверьте это с curl --version с упоминанием GSS-API и SPNEGO и с ldd, связанным с вашей версией MIT Kerberos.
  5. Создание клиента Keytab для основного сервиса с ktutil или mskutil
  6. Try, чтобы получить TGT с этим клиента Keytab по kinit -k -t <path-to-keytab> <principal-from-keytab>
  7. Проверьте с klist, что у вас есть кэш билет

Окружающая среда готова к работе:

  1. Экспорт KRB5CCNAME=<some-non-default-path>
  2. Экспорт KRB5_CLIENT_KTNAME=<path-to-keytab>
  3. Invoke curl --negotiate -u : <URL>

MIT Kerberos обнаружит, что обе переменные окружения установлены, проверить их, автоматически получить TGT с Keytab, запросить билет службы и перейти к curl. Вы сделали.

Примечание: это не будет работать с Heimdal.

3
  1. Проверить локон версия

    $ curl -V - Она должна поддерживать функцию "GSS-Negotiate"

  2. Войти с использованием kinit

    $ kinit <user-id>

  3. Использование свернуться

    $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus

    "--negotiate" опция позволяет SPNEGO

    опция "-u" требуется, но игнорируется (принцип указанный при Kinit используется)

    "-b" & "-c" параметры используются для хранения и отправки HTTP-файлов cookie.

+0

Он не должен поддерживать 'GSS-Negotiate', потому что все эти версии сломаны до 7.38.0. Он должен поддерживать «СПЕГО». –

+0

Это отлично работает для меня, и это намного меньше настроек/проблем, чем принятый ответ. curl 7.35.0, нет SPNEGO, только GSS-Negotiate. – BobDoolittle

+0

Являются ли параметры файлов cookie необходимыми для базового теста подключения? Если да, то почему? – peedee