描述如何连接到kerberos安全端点的documentation显示以下内容:
curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."
必须提供-u
标志但被卷曲忽略。
--negotiate
选项是否会导致curl查找事先使用kinit
命令创建的keytab,还是会卷曲提示输入凭据?
如果它查找keytab文件,该命令将查找哪个文件名?
在该地区成为curl
的一次性贡献者。以下是您需要了解的内容:
curl(1)
本身对Kerberos一无所知,也不会与您的凭证缓存和keytab文件进行交互。它会将所有调用委托给GSS-API实现,这将为您带来魔力。什么魔法取决于图书馆,Heimdal和MIT Kerberos。
根据您的问题,我假设您对Kerberos知之甚少,并希望自动对SPNEGO保护的REST端点进行API调用。
这是你需要做的:
curl
7.38.0curl --version
提及GSS-API和SPNEGO以及与您的MIT Kerberos版本链接的ldd
进行验证。ktutil
或mskutil
为服务主体创建客户端密钥表kinit -k -t <path-to-keytab> <principal-from-keytab>
获取具有该客户端密钥表的TGTklist
验证您是否有票证缓存环境现在准备好了:
KRB5CCNAME=<some-non-default-path>
KRB5_CLIENT_KTNAME=<path-to-keytab>
curl --negotiate -u : <URL>
MIT Kerberos将检测到两个环境变量都已设置,检查它们,使用您的keytab自动获取TGT,请求服务票证并传递给curl
。你完成了。
注意:这不适用于Heimdal。
$ curl -V
- 它应该支持“GSS-Negotiate”功能kinit
登录
$ kinit <user-id>
$ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus
“ - 谈判”选项启用SPNEGO
“-u”选项是必需的但是被忽略(使用kinit期间指定的原则)
“-b”和“-c”选项用于存储和发送http cookie。