何が起きたのか?
git pushを実行してGitHubのパスワードを入力したところ、次のエラーが表示されました:
remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/user/repo.git/'
GitHubは2021年8月、クレデンシャルスタッフィング攻撃に対抗するためのセキュリティ上の決断として、Git操作における平文パスワード認証を廃止しました。認証情報のキャッシュには古いパスワードが残っています。**Personal Access Token(PAT)**に置き換えるかSSHに切り替えるまで、すべてのプッシュとプルは失敗し続けます。
なぜこのエラーが発生するのか
2021年8月以前は、アカウントのパスワードを使ってHTTPS経由でGitHubにプッシュできました。GitHubはパスワード漏洩によるアカウント乗っ取りを減らすためにこれを廃止しました。PATはスコープが限定されており、無効化も可能です。万が一漏洩しても、そのトークンだけを無効化すればよく、アカウントのパスワードを変更する必要はありません。
現在の問題:OSの認証情報マネージャーが古いパスワードをキャッシュしています。GitはそれをGitHubに送り続け、GitHubは拒否し続けます。これがあなたが陥っているループです。
簡単な修正方法:Personal Access Tokenを生成する
2ステップで完了します。GitHubでトークンを作成し、それをパスワードとして使用します。
ステップ1 — GitHubでPATを作成する
- **GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)**に移動します。
- **Generate new token (classic)**をクリックします。
- わかりやすい名前(例:
work-laptop-2025)を付け、有効期限を設定します。90日がデフォルトとして適切です。 - Scopesの下でrepo(プライベートリポジトリのフルコントロール)にチェックを入れます。プッシュとプルにはこれで十分です。
- Generate tokenをクリックして、すぐにコピーします。GitHubは一度しか表示しません。
トークンはghp_で始まり、約40文字の長さになります。これがあなたの新しいパスワードです。
ステップ2 — トークンをパスワードとして使用する
再度プッシュを実行します。Gitが認証情報を求めたら、次を入力します:
- Username:GitHubのユーザー名
- Password:トークンを貼り付けます(アカウントのパスワードではありません)
git push origin main
Username for 'https://github.com': your-username
Password for 'https://your-username@github.com': ghp_xxxxxxxxxxxxxxxxxxxx
プッシュが成功すれば、一時的な修正は完了です。ただし、次のプッシュ時にもGitは認証情報を求めます。トークンを永続的に保存するには、続きを読んでください。
恒久的な修正:認証情報ストアにトークンを保存する
オプションA — Git Credential Manager(推奨)
Git Credential Manager(GCM)はトークンをOSのキーチェーンに安全に保存し、再認証を自動的に処理します。Git for Windowsに同梱されており、macOSとLinuxでも簡単にインストールできます。
Windows — GCMはすでにGit for Windowsに同梱されています。一度プッシュするとブラウザウィンドウが開いて認証を行い、Gitはトークンが期限切れになるまで記憶します。
macOS:
brew install --cask git-credential-manager
git-credential-manager configure
Linux (Debian/Ubuntu) — GCMリリースページから最新の.debをダウンロードして:
sudo dpkg -i gcm-linux_amd64.X.X.X.deb
git-credential-manager configure
GCMのセットアップが完了したら、古いキャッシュされたパスワードを削除して、GCMが新しいトークンを保存できるようにします:
git credential reject
protocol=https
host=github.com
(コマンドを実行してEnterを押し、各行を入力した後、空白行でEnterを押して終了します。)
再度プッシュします。GCMが一度だけ認証を求め、トークンを保存します。そのトークンが有効な間は再び尋ねられることはありません。
オプションB — リモートURLにトークンを埋め込む
認証情報マネージャーがない場合は、トークンをリモートURLに直接組み込みます:
git remote set-url origin https://YOUR_TOKEN@github.com/user/repo.git
Gitはプッシュとプルの度に自動的に読み取ります。プロンプトも設定も不要です。
**注意:**トークンは.git/config内に平文で保存されます。そのファイルを読める人はトークンを使用できます。共有マシンや公共のマシンでは使用を避けてください。
オプションC — SSHに切り替える
SSHキーは期限切れになく、一度設定すればタイピングが不要です。毎日GitHubにプッシュするなら、一回限りのセットアップはすぐに元が取れます。
# 鍵を生成する(~/.ssh/id_ed25519 がすでに存在する場合はスキップ)
ssh-keygen -t ed25519 -C "you@example.com"
# 公開鍵を表示する
cat ~/.ssh/id_ed25519.pub
その出力をコピーして、GitHub → Settings → SSH and GPG keys → New SSH keyに貼り付けます。次にリモートをSSHに変更します:
git remote set-url origin git@github.com:user/repo.git
次のプッシュの前に接続を確認します:
ssh -T git@github.com
# Hi your-username! 認証に成功しました...
キャッシュされた古いパスワードを削除する
トークンを生成した後もAuthentication failedが表示されますか?Gitが認証情報を求める前に、OSが古いキャッシュされたパスワードを再送信しています。プラットフォームごとの削除方法を説明します:
Windows(資格情報マネージャー):
git credential-manager erase
protocol=https
host=github.com
または:コントロールパネル → 資格情報マネージャー → Windows 資格情報を開き、github.comのエントリを削除します。
macOS(キーチェーン):
git credential-osxkeychain erase
protocol=https
host=github.com
またはキーチェーンアクセスを開き、github.comを検索して、エントリを手動で削除します。
Linux(ストアヘルパー):
git config --global credential.helper store
次にテキストエディタで~/.git-credentialsを開き、github.comを含む行を削除します。
修正を確認する
小さなものをプッシュして動作を確認します:
git push origin main
成功した出力は次のようになります:
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
To https://github.com/user/repo.git
a1b2c3d..e4f5g6h main -> main
Authentication failedは表示されません。完了です。
Gitが現在使用している認証情報ヘルパーを確認するには:
git config --global credential.helper
トークンのセキュリティに関するヒント
- **有効期限を設定する。**90日が適切なデフォルトです。GitHubは期限切れの1週間前にメールを送信するので、作業中に突然の問題に直面することはありません。
- **最小限のスコープを使用する。**ほとんどの個人リポジトリでは、
repoだけで十分です。必要以上に権限を付与しないでください。 - **トークンをコミットしない。**誤ってコミットしてしまった場合は、GitHubですぐに無効化して新しいものを生成します。無効化した瞬間に漏洩したトークンは使用不能になります。
- 他のツールや設定用に強力なランダム文字列が必要ですか?ToolCraftのパスワードジェネレーターはすべてブラウザ内で動作します。どこにも送信されません。

