Kerberosで保護されたエンドポイントへの接続方法を説明する documentation は、次のことを示しています。
curl -i --negotiate -u : "http://<Host>:<PORT>/webhdfs/v1/<PATH>?op=..."
-u
フラグを指定する必要がありますが、curlでは無視されます。
--negotiate
オプションを指定すると、curlはkinit
コマンドで事前に作成されたキータブを検索しますか、それとも資格情報のプロンプトをcurlしますか?
キータブファイルを検索する場合、コマンドはどのファイル名を検索しますか?
そのエリアでcurl
に一度だけ貢献すること。知っておくべきことは次のとおりです。
curl(1)
自体はKerberosについて何も認識していないため、資格情報キャッシュやキータブファイルとは相互作用しません。すべての呼び出しをGSS-API実装に委任します。GSS-API実装により、魔法が自動的に実行されます。どのような魔法がライブラリ、HeimdalおよびMIT Kerberos。
あなたの質問に基づいて、Kerberosについてほとんど知識がなく、SPNEGOで保護されたRESTエンドポイントへのAPI呼び出しを自動化するだけでよいと思います。
ここにあなたがする必要があるものがあります:
curl
7.38.0をインストールするcurl --version
でこれを確認してくださいおよび SPNEGOと、MIT Kerberosバージョンに対してリンクされたldd
で。ktutil
またはmskutil
を使用して、サービスプリンシパルのclientキータブを作成しますkinit -k -t <path-to-keytab> <principal-from-keytab>
でTGTを取得してくださいklist
でチケットキャッシュがあることを確認します環境の準備が整いました:
KRB5CCNAME=<some-non-default-path>
KRB5_CLIENT_KTNAME=<path-to-keytab>
curl --negotiate -u : <URL>
を呼び出しますMIT Kerberosは、両方の環境変数が設定されていることを検出し、それらを検査し、キータブでTGTを自動的に取得し、サービスチケットを要求してcurl
に渡します。できました。
注:これは、Heimdalでは機能しません。
Curlバージョンを確認する
$ curl -V
-「GSS-Negotiate」機能をサポートする必要があります
kinit
を使用してログイン
$ kinit <user-id>
カールを使用
$ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus
「--negotiate」オプションはSPNEGOを有効にします
「-u」オプションは必須ですが無視されます(kinitで指定された原則が使用されます)
「-b」および「-c」オプションは、HTTP Cookieの保存と送信に使用されます。