はじめに📌
GitHub はHTTPプロトコルにおけるパスワード認証を廃止して個人アクセストークン認証への切り替えを推奨している(参考)。
今までは主にSSH認証を使っていたけど、この際だから推奨されている 個人アクセストークン認証 over HTTPS に切り替えることにした。
とはいえ git 操作のたびにユーザ名や個人アクセストークンを入力するのは面倒なので、自動的に認証するよう設定を行う。
| App | Version |
|---|---|
|
Windows10 |
|
|
git |
2.27.0.windows.1 |
|
PowerShell |
7.0.3 |
やったこと
個人アクセストークンを作成した後、次のコマンドを叩いたら設定終わり。
git config --global credential.helper wincred
$cred = Get-Credential -Credential YOUR_GITHUB_USERNAME
cmdkey /generic:git:https://github.com `
/user:$($cred.UserName) `
/pass:$($cred.GetNetworkCredential().Password)
Remove-Variable cred
個人アクセストークンの利用方法🔑
使うときは単純にパスワードとして個人アクセストークンの値を入力すればいいみたい。
個人アクセストークンの作成方法については公式リファレンスを参考。
スコープはとりあえず repo にチェックしておけばよいかと。
Git の credential helper 🔐
GitではHTTPプロトコルを利用する場合の認証情報を保存するための仕組みが有り、credential.helper オプションで設定する。
今回はWindows環境なので wincred を使い、Windowsの資格情報マネージャーで認証を管理する。
git config --global credential.helper wincred
|
定番の認証ツール
|
credential.helperがうまく設定されない場合
自分の場合は ~/.gitcofig ファイルに [credential "helperselector"] が設定されていたので、これを削除して改めて wincred を設定した。
git config --global --unset credential.helperselector.selected
git config --global credential.helper wincred
Windows資格情報マネージャーへの登録🗃️
credential.helperselector を上記で設定していれば、最初の git 操作時に認証情報の入力を求められて自動的に保存される。
以下はその最初の入力をコマンドやGUIから能動的にやる方法。
なので必須作業ではないです。
PowerShell から登録する
cmdkey コマンドを使えば PowerShell から登録できる。
今回は GitHub の認証情報を登録していく。
一応セキュリティを考慮して、個人アクセストークンを平文で扱うことは避け、Get-Credential コマンドレットにより暗号化してから扱うことにした。
(1)
$cred = Get-Credential -Credential YOUR_GITHUB_USERNAME
PowerShell credential request
Enter your credentials.
Password for user YOUR_GITHUB_USERNAME: ***** (2)
(3)
cmdkey /generic:git:https://github.com `
/user:$($cred.UserName) `
/pass:$($cred.GetNetworkCredential().Password)
(4)
Remove-Variable cred
| 1 | GitHub の認証情報を変数 $cred に保存する。YOUR_GITHUB_USERNAME はそれぞれ自分の GitHub ユーザ名に修正する。
|
| 2 | ここで個人アクセストークンを入力する。これは暗号化される。 |
| 3 | cmdkey コマンドで汎用資格情報に登録する。今回は GitHub を対象にするので、ターゲットを git:https://github.com とする。 |
| 4 | 必要なくなった変数 $cred を削除。 |
|
変数展開の仕方について
cmdkey はうまく PowerShell 変数オブジェクトをあつかえない。よって変数 $cred がコマンドに渡される前に変数展開させておく必要がある。このため変数展開には部分式( $($…) )を使うことで先行評価させている(参考: PowerShell のString評価の方法と罠)。
|
Get-Credential コマンドレットを実行したとき、環境によってはCLIの代わりに次のようなダイアログが出る。
このときもパスワード欄に個人アクセストークンを入力すればいい。
以上で git 利用時の GitHub 認証情報が登録された。
これによりプライベートリポジトリをクローンするときなどで、毎回ユーザ名・パスワードを入力する手間が省ける。
登録した資格情報の確認
資格情報マネージャーに登録された Git の認証情報を確認したい場合は cmdkey /list:<TARGET_NAME> コマンドで一覧表示できる。
cmdkey /list:git:http*
ターゲット: git:https://github.com
種類: 汎用
ユーザー: YOUR_GITHUB_USERNAME
ローカル コンピューターの常設
資格情報の削除
間違えた資格情報を登録してしまったときなど、削除するには cmdkey /delete:<TARGET_NAME> コマンドを使う。
cmdkey /delete:git:https://github.com
CMDKEY: 資格情報を正しく削除しました。
GUIで登録する場合
-
コントロールパネル→ユーザーアカウント→資格情報マネージャー→Windows資格情報を開く -
汎用資格情報の追加からGit認証情報を追加 -
今回はGitHub接続時の認証情報を追加
-
インターネットまたはドメインのアドレスにはgit:https://github.comを指定。 -
ユーザー名はGitHubに登録しているユーザ名またはメールアドレス。 -
パスワードに個人アクセストークンを入力する。
-
おわりに😎
今回は git コマンドによる GitHub への認証をWindows資格情報マネージャーで管理することで、自動的に認証されるようにした。
これでもうHTTPSプロトコルでの認証もこわくない。
記事の主体が資格情報マネージャーのコマンド操作になった気がするけど、まあええやろの精神😗。