描述如何连接到 kerberos 安全端点的文档显示以下内容:
curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."
该-u
标志必须提供,但会被 curl 忽略。
该选项是否--negotiate
会导致 curl 查找使用该命令预先创建的密钥表kinit
,或者 curl 会提示输入凭据?
如果它查找 keytab 文件,该命令将查找什么文件名?
作为该领域的偶尔贡献者curl
。以下是您需要知道的:
curl(1)
它本身对 Kerberos 一无所知,并且不会与您的凭证缓存或您的 keytab 文件进行交互。它将所有调用委托给 GSS-API 实现,这将为您带来魔力。什么魔法取决于图书馆、Heimdal 和 MIT Kerberos。
根据您的问题,我假设您对 Kerberos 知之甚少,并且只想自动执行对受 SPNEGO 保护的 REST 端点的 API 调用。
这是您需要做的:
curl
7.38.0curl --version
通过提及 GSS-API和SPNEGO 并ldd
链接到您的 MIT Kerberos 版本来验证这一点。ktutil
mskutil
kinit -k -t <path-to-keytab> <principal-from-keytab>
klist
您是否有票证缓存环境现已准备就绪:
KRB5CCNAME=<some-non-default-path>
KRB5_CLIENT_KTNAME=<path-to-keytab>
curl --negotiate -u : <URL>
MIT Kerberos 将检测到两个环境变量都已设置,检查它们,使用您的密钥表自动获取 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
“--negotiate”选项启用 SPNEGO
"-u" 选项是必需的,但被忽略(使用 kinit 时指定的原则)
“-b”和“-c”选项用于存储和发送 http cookie。
我正在使用版本 7.54.0。以下命令对我来说很好。(请记住/注意协商选项前有双破折号)。
curl --negotiate -u: '<the_full_url>'