Git Credential ManagerによるGitクライアント認証の統合

GitHubをはじめとするソースコードホスティングサービスにおいて、セキュリティー上の要請から、多要素認証を前提としてソースコードへのパスワードの認証によるアクセスを排除するのは全体的な傾向です。

2021年8月にGitHubCLIからのパスワード認証が廃止されたのに続いて、Bitbucket Cloud(bitbucket.org)も2022年3月にAPIhttpsでのベーシック認証でのパスワードによる認証を廃止しました。

github.blog

community.atlassian.com

GitレポジトリーへのCLIからのアクセスで有効な認証方法としては、パーソナルアクセストークン(PAT)や、SSHによる公開鍵認証があります。

それ以外の選択肢として、CLIからブラウザーを経由したシームレスな認証によるアクセスを提供するのが、今回紹介するGit Credential Managerです。

Git Credential Managerは、以前Git Credential Manager for Windowsとして開発され、Git for Windowsに同梱されていました。LinuxおよびmacOS向けにはGit Credential Manager for Mac and Linuxとして開発されていました。これらがクロスプラットフォームに統合されたのがGit Credential Managerです。

当初はGit Credential Manager Coreという名称で公開されていましたが、プラットフォーム間の統合が完了したことから、Gitクライアントにおけるユニバーサルな認証プラットフォームであるという意味合いを強調して、Git Credential Manager と改名されました。

opcdiary.net

github.blog

Git Credential Managerの導入

Git Credential Managerは、Git for Windowsには同梱して提供されています。

macOSおよびLinux向けには、GitHubGitCredentialManager/git-credential-manager からパッケージが提供されています。

Git Credential ManagerによるGit認証

Git Credential Managerを導入後、ターミナルからGit操作を行うと、Git Credential Managerのウィンドウが開いて、画面の指示に従いブラウザー上でサービスにログインすることで、認証を行う事ができます。

次の画像は、ターミナルからGit操作を行った際に、Git Credential Managerがログイン画面を表示している様子です。

認証の情報は、Windowsは資格情報マネージャー、macOSはキーチェーンアクセスに保存します。

VS Codeとの連携

Container

VS CodeのRemote Containerを使用している場合、ホストでGit Credential Managerを使用している場合はコンテナー内でもGit Credential Managerを使用して認証します。

参考: Developing inside a Container using Visual Studio Code Remote Development

WSL

WSL上でGitを使用する場合、次のコマンドを実行して ~/.gitconfig に設定し、Windows上のGit Credential Managerで認証を行います。

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager-core.exe"

Git Credential Manager for Windowsの時代に設定を行っていた場合は、 Git Credential Manager Coreへの移行時にCredential Managerへのパス及び実行ファイル名が変更になっているため、再設定が必要です。

参考: Git for Windows 2.36.1 breaks WSL setup steps · Issue #692 · GitCredentialManager/git-credential-manager · GitHub

Bitbucket Cloudとの連携

Bitbucket Cloudでは、前述のベーシック認証の廃止後、Git Credential Managerでの認証時にGitクライアントの設定credential.bitbucketAuthModesoauth に設定しないとGit Credential Managerでの認証ができない不具合がありましたが、Git Credential Managerの 2.0.567 で解消しています。

参考: Unable to use Bitbucket SSO · Issue #329 · GitCredentialManager/git-credential-manager · GitHub

Git Credential Managerを使用することにより、多要素認証の使用を前提として、パスワードとPATの二重管理を行わずに、ソースコードへのアクセスをセキュアに行う事ができます。Windowsプラットフォーム以外での普及はまだこれからですが、ぜひお試しください。