При использовании --negotiate с curl требуется файл keytab?

на документация описание подключения к защищенной конечной точке kerberos показывает следующее:

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

на -u флаг должен быть предоставлен, но игнорируется curl.

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

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

2 ответов


будучи один раз-в-А-а-автор 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. попробуйте получить TGT с этим клиент keytab by 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.


  1. проверить версию curl

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

  2. войти с помощью kinit

    $ kinit <user-id>

  3. использовать curl

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

    "--negotiate" опция включает SPNEGO

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

    "-b" & "-C" параметры используются для хранения и отправки http cookies.