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

2vuwiymt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(684)

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

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

这个 -u 必须提供标志,但被curl忽略。
是吗 --negotiate 选项使curl查找预先使用 kinit 命令,还是将提示提供凭据?
如果它查找keytab文件,那么命令将查找什么文件名?

neskvpey

neskvpey1#

答案是:

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

hfwmuf9z2#

检查 curl 版本 $ curl -V -应支持“gss协商”功能
使用登录
kinit $ kinit <user-id> 使用 curl $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus “--negotiate”选项启用spnego
“-u”选项是必需的,但被忽略(使用kinit期间指定的原则)
“-b”&“-c”选项用于存储和发送http Cookie。

kiayqfof

kiayqfof3#

做一个偶尔的贡献者 curl 在那个地区。以下是您需要知道的: curl(1) 它本身对kerberos一无所知,不会与您的凭证缓存或keytab文件进行交互。它将把所有调用委托给一个gss api实现,这将为您带来奇迹。什么魔力取决于图书馆,海姆达尔和麻省理工学院kerberos。
基于您的问题,我假设您对kerberos知之甚少,只想自动化对由spnego保护的rest端点的api调用。
以下是您需要做的:
有一个类似unix的操作系统
至少安装mit kerberos 1.11
至少安装 curl 7.38.0针对mit kerberos
请验证 curl --version 提及gss api和spnego以及 ldd 链接到你的mit kerberos版本。
使用创建服务主体的客户机密钥表 ktutil 或者 mskutil 尝试通过以下方式获得具有该客户机密钥表的tgt 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> mitkerberos将检测到两个环境变量都已设置,检查它们,用您的keytab自动获取tgt,请求服务票证并传递给 curl . 你完了。
注意:这不适用于heimdal。

相关问题