The 文档 http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html描述如何连接到 kerberos 安全端点显示以下内容:
curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."
The -u
必须提供标志,但被curl 忽略。
是否--negotiate
选项导致curl查找预先使用以下命令创建的密钥表kinit
命令,或者curl会提示输入凭据?
如果它查找密钥表文件,该命令将查找什么文件名?
偶尔成为一个贡献者curl
在那个地区。以下是您需要了解的内容:
curl(1)
它本身对 Kerberos 一无所知,并且不会与您的凭据缓存或密钥表文件交互。它将所有调用委托给 GSS-API 实现,这将为您带来神奇的效果。什么魔法取决于图书馆、Heimdal 和 MIT Kerberos。
根据您的问题,我假设您对 Kerberos 知之甚少,并且只想自动执行对 SPNEGO 保护的 REST 端点的 API 调用。
这是您需要做的:
- 拥有类 Unix 操作系统
- 至少安装 MIT Kerberos 1.11
- 至少安装
curl
7.38.0 对抗 MIT Kerberos
- 验证这一点
curl --version
提到 GSS-APIandSPNEGO 和ldd
链接到您的 MIT Kerberos 版本。
- 创建一个client服务主体的密钥表
ktutil
or mskutil
- 尝试获取 TGTclient密钥表由
kinit -k -t <path-to-keytab> <principal-from-keytab>
- 验证与
klist
您有票证缓存
环境现已准备就绪:
- Export
KRB5CCNAME=<some-non-default-path>
- Export
KRB5_CLIENT_KTNAME=<path-to-keytab>
- Invoke
curl --negotiate -u : <URL>
MIT Kerberos 将检测两个环境变量是否已设置,检查它们,使用您的密钥表自动获取 TGT,请求服务票证并传递给curl
。你完成了。
Note:这对海姆达尔不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)