当使用--convergence with curl时,需要一个keytab文件



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

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

必须提供-u标志,但curl忽略了该标志。

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

如果要查找keytab文件,命令要查找的文件名是什么?

在该地区成为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. 请使用提及GSS-APISPNEGO的curl --version以及针对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。

  1. 检查卷曲版本

    $ curl -V-应支持"GSS协商"功能

  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。

我使用的是7.54.0版本。以下命令对我来说很好。(请记住/注意,协商选项之前有双破折号)。

curl --negotiate -u: '<the_full_url>'

相关内容

  • 没有找到相关文章

最新更新