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

时间:2016-07-21 16:39:54

标签: hadoop curl kerberos webhdfs keytab

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

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

必须提供-u标志,但curl会忽略它。

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

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

3 个答案:

答案 0 :(得分: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. 为服务主体创建客户端密钥表
  7. 尝试通过kinit -k -t <path-to-keytab> <principal-from-keytab>
  8. 获取带有客户端密钥表的TGT
  9. klist验证您是否拥有票证缓存
  10. 环境现已准备就绪:

    1. 导出KRB5CCNAME=<some-non-default-path>
    2. 导出KRB5_CLIENT_KTNAME=<path-to-keytab>
    3. 调用curl --negotiate -u : <URL>
    4. MIT Kerberos将检测到两个环境变量都已设置,检查它们,使用您的keytab自动获取TGT,请求服务票证并传递给curl。你完成了。

      注意:这不适用于Heimdal。

答案 1 :(得分:9)

  1. 检查卷曲版本

    $ curl -V - 它应该支持该功能&#34; GSS-Negotiate&#34;

  2. 使用kinit

    登录

    $ kinit <user-id>

  3. 使用curl

    $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus

    &#34; - 协商&#34;选项启用SPNEGO

    &#34; -u&#34;选项是必需的但是被忽略(使用kinit期间指定的原则)

    &#34; -b&#34; &安培; &#34; -c&#34;选项用于存储和发送http cookie。

答案 2 :(得分:-1)

答案是

[
  {
    "operation": "shift",
    "spec": {
      "scheduler": {
        "schedulerInfo": {
          "usedCapacity": "root",
          "queues": {
            "queue": {
              "*": {
                "@usedCapacity": "@queueName"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "&UsedCapacity"
    }
  }
]