1. ホーム
  2. hadoop

[解決済み] curl で --negotiate を使用する場合、keytab ファイルは必要ですか?

2022-03-04 23:55:37

質問

その ドキュメンテーション kerberosで保護されたエンドポイントに接続する方法を説明したもので、次のように表示されます。

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

-u フラグを指定する必要がありますが、curl では無視されます。

を実行しますか? --negotiate オプションであらかじめ作成されたキータブをcurlが探すようになります。 kinit コマンドを使用するのですか、それとも認証情報を入力するのですか?

keytab ファイルを探す場合、コマンドはどのようなファイル名を探すのでしょうか?

解決方法は?

に一度だけ貢献することです。 curl その地域で 以下は、その内容です。

curl(1) はKerberosについて何も知らないので、認証情報キャッシュやkeytabファイルと対話することはありません。すべての呼び出しを GSS-API 実装に委ね、その実装があなたのために魔法をかけるのです。どのような魔法を使うかは、ライブラリ、Heimdal、MIT Kerberosに依存します。

あなたの質問から推測すると、あなたはKerberosについてほとんど知識がなく、SPNEGOによって保護されたRESTエンドポイントへのAPIコールを単に自動化したいだけなのでしょう。

そのために必要なことは以下の通りです。

  1. Unix系OSをお持ちの方
  2. MIT Kerberos 1.11 以上をインストールしてください。
  3. 少なくとも curl MIT Kerberosに対する7.38.0
  4. で検証してください。 curl --version GSS-APIに言及する SPNEGOと ldd MIT Kerberos バージョンとリンクしています。
  5. を作成します。 クライアント サービスプリンシパルのキータブは ktutil または mskutil
  6. それを使ってTGTを取得してみる クライアント によるキータブ kinit -k -t <path-to-keytab> <principal-from-keytab>
  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では動作しません。