При использовании --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.
вот что вам нужно сделать:
- иметь Unix-подобную ОС
- установите по крайней мере MIT Kerberos 1.11
- установить по крайней мере
curl
7.38.0 против MIT Kerberos - проверьте это с помощью
curl --version
упоминание GSS-API и SPNEGO и сldd
связано с вашей версией MIT Kerberos. - создать клиент keytab для субъекта-службы с
ktutil
илиmskutil
- попробуйте получить TGT с этим клиент keytab by
kinit -k -t <path-to-keytab> <principal-from-keytab>
- проверить с помощью
klist
что у вас есть кэш
окружающая среда теперь готова к работе:
- экспорт
KRB5CCNAME=<some-non-default-path>
- экспорт
KRB5_CLIENT_KTNAME=<path-to-keytab>
- Invoke
curl --negotiate -u : <URL>
MIT Kerberos обнаружит, что обе переменные среды установлены, проверьте их, автоматически получите TGT с помощью keytab, запросите сервисный билет и пройдите в curl
. Вы закончили.
Примечание: это не будет работать с Heimdal.
-
проверить версию curl
$ curl -V
- Он должен поддерживать функцию "GSS-Negotiate" -
войти с помощью
kinit
$ kinit <user-id>
-
использовать 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.