使用--negotiate with curl时,是否需要keytab文件?

问题描述 投票:19回答:2

描述如何连接到kerberos安全端点的documentation显示以下内容:

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

必须提供-u标志但被卷曲忽略。

--negotiate选项是否会导致curl查找事先使用kinit命令创建的keytab,还是会卷曲提示输入凭据?

如果它查找keytab文件,该命令将查找哪个文件名?

hadoop curl kerberos webhdfs keytab
2个回答
37
投票

在该地区成为curl的一次性贡献者。以下是您需要了解的内容:

curl(1)本身对Kerberos一无所知,也不会与您的凭证缓存和keytab文件进行交互。它会将所有调用委托给GSS-API实现,这将为您带来魔力。什么魔法取决于图书馆,Heimdal和MIT Kerberos。

根据您的问题,我假设您对Kerberos知之甚少,并希望自动对SPNEGO保护的REST端点进行API调用。

这是你需要做的:

  1. 拥有类Unix操作系统
  2. 至少安装MIT Kerberos 1.11
  3. 至少为MIT Kerberos安装curl 7.38.0
  4. 通过curl --version提及GSS-API和SPNEGO以及与您的MIT Kerberos版本链接的ldd进行验证。
  5. 使用ktutilmskutil为服务主体创建客户端密钥表
  6. 尝试通过kinit -k -t <path-to-keytab> <principal-from-keytab>获取具有该客户端密钥表的TGT
  7. 使用klist验证您是否有票证缓存

环境现在准备好了:

  1. 出口KRB5CCNAME=<some-non-default-path>
  2. 出口KRB5_CLIENT_KTNAME=<path-to-keytab>
  3. 调用curl --negotiate -u : <URL>

MIT Kerberos将检测到两个环境变量都已设置,检查它们,使用您的keytab自动获取TGT,请求服务票证并传递给curl。你完成了。

注意:这不适用于Heimdal。


9
投票
  1. 检查卷曲版本 $ curl -V - 它应该支持“GSS-Negotiate”功能
  2. 使用kinit登录 $ kinit <user-id>
  3. 使用卷曲 $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus “ - 谈判”选项启用SPNEGO “-u”选项是必需的但是被忽略(使用kinit期间指定的原则) “-b”和“-c”选项用于存储和发送http cookie。
© www.soinside.com 2019 - 2024. All rights reserved.