仕事

【GitHub】「Support for password authentication was removed」エラーの解決方法

2022年10月4日

パスワード認証エラーの解決方法

※2026年10月に全面的に書き直した。前の版では「アクセストークンをURLに入れる」方法を紹介していたけど、これは安全じゃなかった。前の版を見てURLにトークンを入れた人は、「URLにトークンを入れてしまった人へ」の章を先に読んでほしい。

SourcetreeでGitHubのリポジトリをCloneしようとしたら、エラーで止まった。今まではユーザー名とパスワードで普通にできていたのに!

調べてみたら、GitHubは2021年8月13日から、Gitの操作でアカウントのパスワードを受け付けなくなっていた。

ということで今回は、このエラーの直し方を解説する。昔の俺みたいに「とりあえずURLにトークンを入れておけばいいでしょ」とならないように、安全な方法から順番に書いていく。

どうも、スニーキーです。

エラーの内容

Sourcetreeで出たエラー

エラー全文↓

remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/xxxxxxxx/xxxxxxxx.git/'

つまり「パスワードでのログインはもうできないよ」ってこと。SourcetreeやVS Codeのような画面のあるツールでも、中ではGitが動いている。なので、どのツールで出ても原因は同じだ。

解決方法は3つ

解決方法3つの比較

GitHubの公式ドキュメントでは、HTTPSで使うなら「GitHub CLI」か「Git Credential Manager」を勧めている。(参照:https://docs.github.com/en/get-started/git-basics/caching-your-github-credentials-in-git)

おすすめ順に並べるとこうなる。

  • Git Credential Manager:ブラウザでGitHubにログインするだけ。トークンを自分で作らなくていい
  • GitHub CLI:gh auth login を1回実行するだけ
  • アクセストークン:上の2つが使えないときだけ。権限を絞って作る

どれも、ログイン情報はOSの安全な保管場所(Windowsなら資格情報マネージャー、Macならキーチェーン)に入る。ファイルやURLに平文で残らないのがポイントだ。

方法1:Git Credential Manager(おすすめ)

Git Credential Managerの流れ

Git Credential Manager(以下GCM)は、Gitのログインを代わりにやってくれるツールだ。

Windowsの場合は、Git for Windowsに最初から入っている。古いGitだとGitHubのブラウザログインに対応していないので、まずGit for Windowsを最新にする。公式には「最低でも2.29以上」と書いてある。

Macの場合は、Homebrewで入れる↓

brew install --cask git-credential-manager

あとは普通にCloneやPushをするだけ。初回だけブラウザが開いてGitHubのログイン画面が出るので、ログインして許可する。2段階認証もここで済む。2回目からは聞かれない。

方法2:GitHub CLI

GitHub CLIでのログイン

GitHub CLI(gh コマンド)を入れている人は、これでもいい↓

gh auth login

質問に答えていくだけ。途中で使うプロトコルを聞かれたら「HTTPS」を選び、「GitのログインにもGitHubの認証情報を使うか」と聞かれたら「Y」と答える。これで git push のときにGitHub CLIの認証が使われる。

方法3:アクセストークンを使う場合

fine-grained tokenの設定

会社のPCでツールを入れられないなど、どうしてもトークンを使うときの方法。

前の版の記事では「classic」という古い種類のトークンを作っていた。でもclassicは、自分が触れるすべてのリポジトリに届いてしまう。GitHubは今、権限を細かく絞れる「fine-grained」のトークンを勧めている。(参照:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)

作り方は、GitHubの右上のアイコン →「Settings」→ 左メニュー下の「Developer settings」→「Personal access tokens」→「Fine-grained tokens」→「Generate new token」。

設定はこの3つだけ押さえればいい。

  • 有効期限:必ず付ける(無期限にしない)
  • Repository access:「Only select repositories」で、使うリポジトリだけ選ぶ
  • Permissions:「Contents」だけ。Cloneだけなら Read-only、Pushもするなら Read and write

作ったトークンは、URLではなくパスワード欄に入れる。CloneやPushでユーザー名とパスワードを聞かれたら、パスワードのところにトークンを貼る。GCMが入っていれば、その後は覚えておいてくれる。

公式ドキュメントにも「アクセストークンはパスワードと同じように扱って」と書いてある。つまり、人に見せたり、ファイルに書いたりしちゃダメってこと。

URLにトークンを入れてしまった人へ

URLに入れたトークンが残る場所

ここからは、前の版の記事を見て https://トークン@github.com/... の形でCloneした人向け。

実際に、ダミーのトークンをURLに入れて試してみた↓

git remote -v にトークンがそのまま出る

git remote -v を打つと、トークンがそのまま表示される。リポジトリの中の .git/config というファイルにも、平文で書き込まれていた。画面共有中にこのコマンドを打ったら、それだけでトークンが漏れる。コマンドで打った人は、コマンドの履歴にも残っている。正直、昔の自分の記事を見てゾッとした。

直し方は2ステップ。

1. URLからトークンを消す

リポジトリのフォルダで、これを実行する↓

git remote set-url origin https://github.com/ユーザー名/リポジトリ名.git
set-url の後はトークンが消えた

もう一度 git remote -v を打って、トークンが消えていればOK。俺の環境でも、.git/config からトークンがきれいに消えた。

2. そのトークンをGitHubで削除する

URLから消しても、トークン自体はまだ使える状態のまま。GitHubの「Settings」→「Developer settings」→「Personal access tokens」で、そのトークンを削除する。そのあと、方法1〜3のどれかでログインし直せばいい。

まとめ

まとめ
  • パスワードでのログインは、2021年8月13日からできない
  • おすすめはGit Credential Manager。ブラウザでログインするだけ
  • トークンを使うなら、fine-grainedで権限と期限を絞って、パスワード欄に入れる
  • URLにトークンを入れてしまったら、git remote set-url で消して、トークンも削除する

前の版の記事は、正直「とりあえず動けばいい」で書いていた。今回書き直してみて、手順を紹介するならその手順が安全かまで確かめないといけないと思った。

誰かの助けになれば嬉しい。

-仕事