GitHubから 「[GitHub] Your personal access token (classic) is about to expire」 というメールが届きました。
パスワード代わりに使用している個人アクセストークン(PAT)の有効期限が迫っているという通知ですが、これを見逃したままGCE(Google Compute Engine)上でGit操作を行ったところ、認証エラーが発生してしまいました。
今回は、古いトークンの削除から新しいトークンの再設定までの手順を備忘録として残します。
発生したエラー
GCE上のプロジェクトディレクトリで git pull を実行したところ、以下のエラーが出力されました。
$ git pull remote: Invalid username or token. Password authentication is not supported for Git operations. fatal: Authentication failed for 'https://github.com/YourUsername/YourRepository.git/'
原因は明白で、GCE上にキャッシュされていたGitの認証情報(有効期限切れのPAT)を使ってアクセスしようとしたため、GitHub側から弾かれてしまった状態です。
解決手順
古い認証情報をクリアし、新しく発行したトークンを記憶させ直します。
1. GitHubで新しいアクセストークンを発行する
まずはGitHubのWeb画面で新しいトークンを取得します。
- GitHub右上のプロフィールアイコンから [Settings] を開く
- 左側メニューの一番下にある [Developer settings] を選択
- [Personal access tokens] > [Tokens (classic)] を開く
- 「Generate new token」から新しいトークンを発行(または期限切れのトークンをRegenerate)
- 表示された
ghp_から始まる新しいトークンをコピーして手元に控えておく
2. GCE上の古い認証情報を削除する
GCE(Linux環境)にSSHログインし、キャッシュされている古いトークンを削除します。通常、認証情報は ~/.git-credentials に保存されています。
# 古い認証情報ファイルを削除 $ rm ~/.git-credentials
※もし No such file or directory と言われた場合は、ファイルが存在しない(または別の方法で管理されている)だけなので、そのまま次の手順に進みます。
3. Gitの資格情報保存を有効にする(念のため)
次回以降、毎回パスワード(トークン)を入力しなくて済むように、credential helper の設定をしておきます。
$ git config --global credential.helper store
4. Gitコマンドを実行し、新しいトークンを入力する
再度、対象のリポジトリ内でGitコマンドを実行します。
$ git pull
すると、先ほどとは異なりUsernameとPasswordの入力を求められます。
- Username for 'https://github.com': GitHubのユーザー名を入力
- Password for 'https://YourUsername@github.com': 手順1でコピーした新しい個人アクセストークンをペーストしてEnter
※ターミナル上ではパスワードをペーストしても文字は表示されませんが、正しく入力されているのでそのままEnterを押してください。
まとめ
これで新しいトークンが ~/.git-credentials に保存され、以降はエラーなく git pull や git push ができるようになります。
個人アクセストークンはセキュリティ上、定期的に有効期限が切れるように運用するのが一般的です。「Invalid username or token」が出たら、まずはPATの有効期限を疑い、サクッと再設定してしまいましょう。


