🌍

GIT_ASKPASSとは?(ArgoCDでの使われ方も)

2025/02/21に公開

はじめに

ArgoCD関連の学習をしていたときにGIT_ASKPASSというものが出てきて、知らなかったので記事に残そうと思います。

GIT_ASKPASSとは?

git askpassとは、認証情報を外部プログラムで提供するためのGitの仕組みです。

Gitは通常、git pushなどを実行し、HTTPS認証を求める際に手動でユーザー名とパスワードを入力させられますが、GIT_ASKPASSという環境変数を利用すると、認証情報を外部のプログラムに委ねることができます。

GIT_ASKPASSの基本的な動作

  1. GitはHTTPS認証が必要な場合にGIT_ASKPASSで指定されたプログラムを呼び出す
  2. そのプログラムはユーザー名やパスワードを標準出力 (stdout) に返す
  3. Gitはその出力を使って認証を行う

シンプルなaskpassスクリプトの例

例えば、以下のようなaskpass.shを作成し、それをGIT_ASKPASSに設定すると、Gitが自動でパスワードを取得できます。

#!/bin/bash
echo "my-secret-password"

このスクリプトをGIT_ASKPASSに設定すると、Gitの認証時にこのスクリプトが実行され、my-secret-passwordがGitに渡されます。

export GIT_ASKPASS=/path/to/askpass.sh
git clone https://example.com/private-repo.git

この場合、Gitはaskpass.shを呼び出してパスワードを取得し、リポジトリをクローンできます。

ArgoCDにおけるgit askpass

ArgoCDでは、単純なスクリプトではなく、gRPCサーバー (askpassサーバー) を使って認証情報を管理します。
そのため、ArgoCDのaskpassプログラム (argocd-git-ask-pass) は、Gitから呼ばれたときにgRPCを通じてUNIXソケット上のaskpassサーバーに認証情報を問い合わせる仕組みになっています。

ArgoCDのgit askpassの動作イメージ

  1. ArgoCDがGitの認証情報をaskpassサーバーに保存 (Add(username, password))
  2. Gitが認証を要求 (GIT_ASKPASS=argocd-git-ask-passに設定)
  3. argocd-git-ask-passがaskpass サーバーに gRPC 経由で問い合わせ (GetCredentials(nonce))
  4. askpassサーバーが認証情報を返す
  5. Gitが取得した認証情報を使って認証を行う

この方法により、ArgoCDは認証情報を安全に管理しつつ、Gitにシームレスにアクセスできます。

Discussion