Git で安全に認証を行う:SSH キー vs 資格情報マネージャー


git credential-cache コマンドは、Git がリモートリポジトリへのアクセスを認証するために使用する 資格情報 を管理するためのツールです。このコマンドを使用すると、ユーザー名とパスワードを安全に保存し、毎回入力する必要をなくすことができます。

3つのモード

git credential-cache には、資格情報を保存する方法を制御する 3 つのモードがあります。

  1. cache
    デフォルトモード。認証情報はメモリにキャッシュされ、次回の Git 操作まで保存されます。コンピュータを再起動すると消去されます。
  2. store
    認証情報は git-credentials ファイルに暗号化されて保存されます。このファイルはデフォルトで ~/.git-credentials にあります。
  3. osxkeychain
    (macOS のみ) 認証情報は macOS のキーチェーンに保存されます。

それぞれのモードの利点と欠点

  • osxkeychain
    他のモードよりも使いやすい場合がありますが、macOS のみで使用できます。
  • store
    資格情報は暗号化されて保存されるため、cache モードよりも安全です。ただし、ファイルを手動で編集する必要があるため、管理が少し複雑になります。
  • cache
    最も安全なモードではありませんが、最も使いやすいモードです。

どのモードを選択すべきか?

一般的には、cache モード をお勧めします。これは、使いやすく、セキュリティも比較的良好です。ただし、機密性の高い情報にアクセスする場合は、store モード または osxkeychain モード を検討する必要があります。

git credential-cache コマンドの使用例

以下の例では、cache モード で GitHub リポジトリへの認証情報を保存する方法を示します。

git credential-cache store https://github.com

このコマンドを実行すると、Git はユーザー名とパスワード入力を求め、それらを安全に保存します。次回からそのリポジトリにアクセスするときは、資格情報を入力する必要はありません。

git credential-cache コマンドの詳細については、Git リファレンスドキュメントを参照してください:

  • Windows ユーザーは、資格情報マネージャーを使用して Git 資格情報を保存することもできます。
  • 資格情報は暗号化されていますが、完全に安全とは限りません。機密性の高い情報にアクセスする場合は、追加のセキュリティ対策を検討してください。
  • git credential-cache コマンドは、Git 2.1 以降で使用できます。


GitHub リポジトリへの認証情報を cache モード で保存する

git credential-cache store https://github.com

保存されている認証情報一覧を表示する

git credential-cache list

このコマンドを実行すると、保存されているすべての認証情報が表示されます。出力例は以下の通りです。

protocol host username
https://github.com my-username

特定のホストの認証情報を削除する

git credential-cache erase https://github.com

このコマンドを実行すると、https://github.com の認証情報が削除されます。

すべての認証情報を削除する

git credential-cache erase

このコマンドを実行すると、すべての認証情報が削除されます。

  • 資格情報は暗号化されていますが、完全に安全とは限りません。機密性の高い情報にアクセスする場合は、追加のセキュリティ対策を検討してください。
  • 上記のコードを実行する前に、git credential-cache コマンドがシステムにインストールされていることを確認してください。


Git Credential Cache は、Git がリモートリポジトリへのアクセスを認証するために使用する資格情報を管理するための便利なツールですが、代替手段もいくつか存在します。それぞれの方法には長所と短所があるため、自分のニーズに合ったものを選択することが重要です。

代替手段

  1. 環境変数

    環境変数を使用して、ユーザー名とパスワードを保存することができます。これは、最も簡単な方法ですが、セキュリティ上最も危険な方法でもあります。環境変数は誰でも簡単にアクセスできるため、資格情報が漏洩するリスクが高くなります。

    export GIT_CREDENTIAL_USERNAME="my_username"
    export GIT_CREDENTIAL_PASSWORD="my_password"
    
  2. Netrc ファイル

    Netrc ファイルは、ユーザー名とパスワードをプレーンテキストで保存するファイルです。このファイルは、~/.netrc または ~/.git-netrc に配置する必要があります。Netrc ファイルは、環境変数よりも安全ですが、依然として比較的脆弱です。

    machine github.com
        login my_username
        password my_password
    
  3. SSH キー

    SSH キーを使用して、リモートリポジトリへの認証を行うことができます。これは、最も安全な方法ですが、セットアップが少し複雑です。SSH キーを使用するには、まず、公開鍵と秘密鍵のペアを生成する必要があります。次に、公開鍵をリモートリポジトリのサーバーに追加し、秘密鍵をローカルコンピューターに保存する必要があります。

  4. サードパーティ製の認証マネージャー

    1Password や LastPass などのサードパーティ製の認証マネージャーを使用して、Git 資格情報を保存することができます。これらは、環境変数、Netrc ファイル、SSH キーよりも安全で使いやすいことが多いです。

  5. Git Credential Helper

    Git Credential Helper は、資格情報を管理するためのカスタム プログラムです。これらは、環境変数、Netrc ファイル、SSH キー、サードパーティ製の認証マネージャーなど、さまざまな方法で資格情報を保存することができます。Git Credential Helper は、柔軟性と制御性が必要な場合に役立ちます。

それぞれの方法の比較

方法長所短所
環境変数簡単最も危険
Netrc ファイル環境変数よりも安全依然として脆弱
SSH キー最も安全セットアップが複雑
サードパーティ製の認証マネージャー安全で使いやすいサードパーティ製のサービスに依存する
Git Credential Helper柔軟性と制御性セットアップと管理が複雑