👻
GitHubのtoken(classic)を使った認証
背景
- PCはWindows 11(GitBashを使って連携するのが普段使い)
- 今回はWSL2-UbuntuのgitからもGitHub連携することにしました。
- 「WSL2のUbuntuにZenn CLIを導入」で
git push
まで難儀したのでそのメモを残します。
問題に遭遇するまでの経緯
要約すると、最初はIDとPassだけでできたのに次pushしたらエラー起きたということです。
- zennと連携するためのリポジトリをGitHubに作成
- Ubuntuのユーザーホームディレクトリに
git clone
- テストで
git push
(addやcommitは割愛)
-
user.email
とuser.name
を設定 - 再度
git push
- 以下の通り求められるので、usernameとGitHubのパスワードを入力
Username for 'https://github.com': kawasaki8108 Password for 'https://kawasaki8108@github.com':GitHubのパスワード
- 再度
git push
して問題なくpush完了。 - 後のタイミングで改めて
git push
したら、またusernameとpassword求められて先ほどと同じように入力すると、以下の通り、認証方法が変わった旨のエラーが返されました。Username for 'https://github.com': kawasaki8108 Password for 'https://kawasaki8108@github.com':GitHubのパスワード remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication. fatal: unable to access 'https://github.com/ユーザー名/リポジトリ名.git/'
調べると、トークンによる認証を求められているらしく、その設定をしていきます
トークンの認証を設定する
上記のエラーメッセージで案内されているURL―GitHubの公式によると、パスワードを求められたらトークンを入力せよとのことでした。
コマンドラインで HTTPS URL を使用してリモート リポジトリに 、、git clone、git fetchまたはgit pullを接続すると、Git は GitHub のユーザー名とパスワードを要求します。git pushGit でパスワードの入力を求められたら、個人のアクセス トークンを入力します。
公式のほかこちらの記事を参考に実施しました。
テキストで流れをメモしておきます。
- GitHubにログイン> [Settings] > [Developer settings] > [Personal access tokens]
- [tokens (classic)]を選択し、Select scopeは、
repo
、admin:repo_hook
、delete_repo
、をonにして「Generate token」を押す - 発行されたトークンをコピー(一度しか表示されないので注意)
- 毎回usernameとpasswordを聞かれないように認証情報を保存できるようにしておく。今回はstoreモードにしました。デフォルトでは「~/.git-credentials」に保存される。(セキュリティ的にはcacheとタイムアウト使うのがいいと思います)
$ git config --global credential.helper store --file ~/.git-credentials
-
git push
してユーザ名、発行したトークンを入力する(公式記載の通りgit pull
など、GitHub連携系のコマンドならok)$ git push Username for 'https://github.com':ユーザ名 Password for 'https://xxx@github.com':発行したトークン
- いちおう保存されているか
cat ~/.git-credentials
で確認。平文で記載されているはず。 - 最終的にconfigは以下の通り
$ git config -l user.email=メールアドレス user.name=kawasaki8108 credential.helper=store core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=https://github.com/kawasaki8108/zenn-public.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.main.remote=origin branch.main.merge=refs/heads/main credential.helper=store
感想
- 普段使いのGitBashの方でも沼ったので別途まとめておこうと思います。
- 今回のトークンはclassicにしましたが、「Fine-grained personal access tokens」の方がセキュアなのでbeta版ですがこちらを使った方がいいかと思います。
- Fine-grained tokenも実際試したのですが、上記の手順でうまく行かなかったので、permissionsが適切でなかったのか、勘違いしているだけなのか、また落ち着いて試してみます。
- Fine-grained tokenを試した時のPermissionsと成功されている参考記事を下に載せます。
Discussion