github PATの使い方

githubのpersonal access tokensの有効期限が切れた。github-actionsも壊れた。昨年末に色々調べた気がするのだが、すっかり忘れてしまった。

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

こんな感じのトークンを使う。

普段はsshの公開鍵認証を使っているので全然気づかなかったのだが:

ssh -T git@github.com
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

https通信はPAT認証しないといけない。

git clone https://github.com/USERNAME/REPOSITORY.git
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/USERNAME/REPOSITORY.git

PAT を使う

git cloneしようとすると、PATを入力するメッセージが表示される...らしい。

$ git clone https://github.com/USERNAME/REPO.git
Username: YOUR_USERNAME
Password: YOUR_TOKEN

自分の場合、ブラウザが立ち上がった。Windows端末でGCMを有効にしているからかもしれない。古いトークンが端末にキャッシュされている場合も聞かれないことがあるそう。

Git Credential Manager (GCM) を使う

git cloneしたら、小さなウィンドウが起動して、githubへのサインイン or PATの入力画面が表示された。そこに認証したら全て解決した。

$git config --list
...
credential.helper=manager-core

資格情報は "Git Credential Manager for Windows" (manager) ではなく "Git Credential Manager (GCM)" (manager-core) に保存されている。

https://github.com/settings/applications を見ると、Git-Credentials-Manager は OAuth アプリケーションとして認証されている。ここで認証すれば、PATの期限が切れるまでは認証不要になる。

認証後、サービス提供側で GCM を Revoke しても認証状態は続くようだ。だが、PATを廃止したタイミングで認証が通らなくなった。GCMはOAuthのプロセスを通してPATをローカル端末に受信し、保存しているのだと推測される。

PATを直接使う

以下の方法でも、PATを使ってリポジトリにアクセスできる。

git clone https://USERNAME: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@github.com/USERNAME/REPOSITORY.git

わかると思うが、URLにトークンが含まれるのでオススメはしない。