GitHubでgit cloneが認証エラーになるときの直し方|403・Repository not found・Permission denied (publickey)・公開リポジトリの一時的な認証

git cloneが認証エラーになるときのアイキャッチ。エラーの文とURLで原因を見分け、HTTPSはパスワードではなくトークンかGitHub CLI、SSHは鍵の登録を確かめる

GitHubでgit cloneやpushが認証エラーで止まったときは、エラーの文と、リモートのURLがHTTPSかSSHかで原因を見分けられます。HTTPSならパスワードの代わりに個人用アクセストークン(PAT)かGitHub CLIでログインし直し、SSHなら使っている鍵がGitHubのアカウントに登録されているかを確かめます。

2026年10月19日には、GitHubが「アクセスが異常に多いあいだ、公開リポジトリのHTTPSでのcloneやfetchの一部に、一時的に認証を求めることがある」と案内しました。今まで通っていた公開リポジトリのcloneが急に止まった場合は、こちらに当てはまるかもしれません。

目次

git cloneの認証エラーをメッセージで見分ける早見表

出ているもの 考えられる原因 見るところ
公開リポジトリをHTTPSでcloneしたら、認証が必要という意味のメッセージで止まった アクセスが異常に多いときの一時的な保護(2026年10月19日の案内) 「公開リポジトリのgit cloneで急に認証を求められるとき」
ユーザー名とパスワードを入れても通らない Gitでのパスワード認証はもう使えない 「パスワードが通らないとき」
The requested URL returned error: 403 リポジトリに入れないアカウント、保存された古い資格情報、組織の設定など 「403エラーが出るとき」
Repository not found URLの打ちまちがい、権限がない、SSHの鍵がちがう 「Repository not foundが出るとき」
Permission denied (publickey) SSHの鍵が読み込まれていない、GitHubに登録されていない、ユーザー名がgitでない 「SSHでPermission denied (publickey)が出るとき」

まずHTTPSかSSHかをgit remote -vで確かめる

GitHubでの認証のしかたは、cloneのときに選んだURLで決まります。HTTPSのURLならトークンなどで、SSHのURLならSSHの鍵で認証します。手元にあるリポジトリでは、リポジトリのフォルダで次のコマンドを打つとURLが分かります。

git remote -v

HTTPSの場合は、次のように https:// で始まるURLが出ます。

origin  https://github.com/OWNER/REPOSITORY.git (fetch)
origin  https://github.com/OWNER/REPOSITORY.git (push)

SSHの場合は、git@github.com: で始まるURLが出ます。

origin  git@github.com:OWNER/REPOSITORY.git (fetch)
origin  git@github.com:OWNER/REPOSITORY.git (push)

これからcloneする場合は、打ったURLが https:// と git@github.com: のどちらで始まっているかを見ます。URLはリポジトリのページからコピーすると、打ちまちがいを防げます。

公開リポジトリのgit cloneで急に認証を求められるとき(2026年10月19日の一時的な保護)

GitHub Changelogの2026年10月19日の案内によると、アクセスが異常に多いあいだ、GitHubはgithub.comを止めないために、公開リポジトリのHTTPSでのcloneやfetchの一部に、一時的に認証を求めることがあります。当てはまった操作は、認証が必要だという意味のメッセージで失敗します。

  • 認証してからやり直すか、保護が解けるのを待ってから認証なしでやり直します
  • 認証したHTTPSでの操作、SSHでの操作、push、関係のないWebやAPIの通信には影響しません
  • 公開リポジトリのすべてに認証がいるようになったわけではありません
  • github.comのすべてのプランのリポジトリが対象です

GitHubは異常な通信に関わる手がかりを使ってできるだけ狭く保護をかけていますが、ふつうの通信も同じ手がかりに当てはまることがあり、認証なしのふつうの操作が止まることもある、としています。すぐに作業を進めたいときは、HTTPSでログインする(PATかGitHub CLI)か、SSHのURLでcloneします。

git clone git@github.com:OWNER/REPOSITORY.git

SSHでcloneするには、SSHの鍵をGitHubのアカウントに登録しておく必要があります。鍵がまだない場合は「SSHでPermission denied (publickey)が出るとき」の鍵の作り方を見てください。CIなど自動でcloneしているときは「GitHub ActionsやCIのcloneで認証を設定する」を見てください。

パスワードが通らないとき:個人用アクセストークン(PAT)を使う

Gitでのパスワード認証はGitHubで廃止されています。HTTPSでGitからパスワードを聞かれたら、GitHubのログインパスワードではなく、個人用アクセストークン(PAT)を入れます。

$ git clone https://github.com/USERNAME/REPO.git
Username: YOUR-USERNAME
Password: YOUR-PERSONAL-ACCESS-TOKEN

ユーザー名も入れる必要がありますが、認証に使われるのはトークンのほうです。ユーザー名を空にすると、資格情報が正しくないというエラーになります。PATはHTTPSでのGit操作にだけ使えます。

PATの種類と作り方

PATには「fine-grained personal access token」と「personal access token (classic)」の2種類があり、GitHubはできるだけfine-grainedのほうを使うようすすめています。fine-grainedは、使えるリポジトリと権限を細かくしぼれます。

  1. GitHubの右上のプロフィール画像から「Settings」を開く
  2. 左のメニューの「Developer settings」を開く
  3. 「Personal access tokens」の「Fine-grained tokens」を開き、「Generate new token」を押す
  4. 名前と有効期限を決め、「Resource owner」(自分のアカウントか組織)を選んでから、リポジトリと権限を必要な分だけ選ぶ
  5. 「Generate token」を押す

classicのトークンは、自分が入れるすべてのリポジトリに使えてしまいます。fine-grainedでできないこと(自分がメンバーでない公開リポジトリへの書き込みなど)があるときだけclassicを使い、コマンドラインでリポジトリに使うなら「repo」のスコープを選びます。どちらも有効期限を付けておくことを、GitHubは強くすすめています。

SAMLのシングルサインオン(SSO)を使っている組織のリポジトリにclassicのトークンで入るときは、トークンをその組織で使えるように承認しておく必要があります。

毎回入力しないための資格情報の保存(gh auth login・Git Credential Manager)

GitHubは、HTTPSでcloneする人に、GitHub CLIかGit Credential Manager(GCM)で資格情報を覚えさせる方法をすすめています。どちらを使っても、PATを自分で作って貼る手間がなくなります。

GitHub CLIでログインする

GitHub CLIを入れてから、次のコマンドを打ち、画面の質問に答えます。Gitで使うプロトコルを聞かれたら「HTTPS」を選び、GitHubの資格情報でGitに認証するかを聞かれたら「Y」と答えます。

gh auth login

Git Credential Managerを使う

Git for WindowsにはGCMが入っています。GitHubはGit for Windowsの最新版を入れることをすすめていて、少なくともGit for Windowsの2.29以上を入れるよう書いています(GitHubでOAuthが使える最初の版)。macOSでは、Homebrewで入れられます。

brew install --cask git-credential-manager

GCMを入れると、次に認証が必要なHTTPSのURLをcloneしたとき、ブラウザでのログインを求められます。2要素認証も、その画面で済ませます。Linuxでは、ディストリビューションごとにGCMの入れ方が違うので、GCMの公式ドキュメントを見て設定します。

Gitのcredential helperで保存する

Gitには、資格情報をしばらくメモリに置く「cache」と、ディスクに保存し続ける「store」のhelperが入っています。cacheは次のように設定します。

git config --global credential.helper cache

storeは、パスワードやトークンを暗号化せずにファイル(ふつうは ~/.git-credentials)に保存します。守っているのはファイルの権限だけなので、Gitの公式ドキュメントも、それが困るならcacheかOSの安全な保存場所を使うhelperにするよう書いています。

古い資格情報が残っているとき

パスワードやトークンを変えたのに、Gitが古い資格情報を使い続けて失敗することがあります。macOSの「キーチェーンアクセス」で github.com を探し、「インターネットパスワード」の項目を直すか消します。macOSの osxkeychain helper でトークンを自分で保存している場合は、コマンドでも消せます。次のように打ってから、最後にもう一度Returnを押します。

$ git credential-osxkeychain erase
host=github.com
protocol=https

Windowsでは、コントロールパネルの「ユーザー アカウント」→「資格情報マネージャー」でGitHubの項目を探して削除すると、次の操作で資格情報を聞かれるようになります。

403エラーが出るとき(The requested URL returned error: 403)

HTTPSで出る403の例は、GitHubのドキュメントでは次の形です。

Error: The requested URL returned error: 403 while accessing
https://github.com/USER/REPO.git/info/refs
fatal: HTTP request failed

GitHubによると、HTTPSのこうしたエラーは、Gitが古いか、そのリポジトリに入る権限がないことが多いとされています。

  • 入れるアカウントで認証しているか:ユーザー名とパスワードを聞かれたら、リポジトリに入れるアカウントで入る。別のアカウントの資格情報が保存されていないかも見る
  • パスワードではなくトークンか:「パスワードが通らないとき」と同じく、PATかGitHub CLI・GCMで認証する
  • 保存された資格情報が古くないか:「古い資格情報が残っているとき」の手順で消して入れ直す
  • 組織の設定:組織がclassicのトークンでの利用を止めていると、classicのトークンでのアクセスは403で失敗する。その場合はfine-grainedのトークンなどを使う。SAMLのSSOがある組織でclassicのトークンを使う場合は、トークンの承認も必要
  • Gitのバージョン:GitHubは決まった最低バージョンはないとしつつ、1.7.10を安定した版の目安にしている
git --version

Repository not foundが出るとき

「Repository not found」は、リポジトリがないか、そのリポジトリを見る権限がないという意味です。

  • URLのつづり:たとえば repoti1e と repotile のような1文字の違いでも出る。URLはリポジトリのページからコピーする
  • 権限:プライベートリポジトリの場合、自分がオーナー、コラボレーター、またはアクセスできるチームのメンバーのどれかになっているか
  • SSHの鍵:SSHでcloneしている場合、その鍵が自分のGitHubアカウントに登録されているか(「SSHでPermission denied (publickey)が出るとき」の接続確認で確かめる)
  • リポジトリが本当にあるか:GitHubのページを開いて確かめる

手元のリポジトリのURLがまちがっていた場合は、正しいURLに直します。

git remote set-url origin https://github.com/OWNER/REPOSITORY.git

SSHでPermission denied (publickey)が出るとき

「Permission denied」は、GitHubのサーバーが接続を断ったという意味です。まず、SSHでGitHubにつながるかを確かめます。

ssh -T git@github.com

つながると、次のように自分のユーザー名が出ます。GitHubはシェルを使わせないので、この表示で正常です。

Hi USERNAME! You've successfully authenticated, but GitHub does not
provide shell access.

初めてつなぐときは、github.comのホストを信頼してよいかを聞かれます。表示された指紋(fingerprint)が、GitHubが公開している指紋と同じときだけ「yes」と答えます。

ユーザー名はいつも「git」

GitHubへのSSH接続は、リモートのURLも含めてすべて「git」というユーザーで行います。自分のGitHubのユーザー名でつなぐと失敗します。

$ ssh -T GITHUB-USERNAME@github.com
Permission denied (publickey).

リモートのURLに自分のユーザー名が入っている場合は、git@github.com: の形に直します。

鍵が読み込まれているか、GitHubに登録されているか

SSHエージェントに読み込まれている鍵の指紋を出します。

ssh-add -l -E sha256

何も出なければ、鍵がないか読み込まれていません。出た場合は、GitHubの「Settings」→「SSH and GPG keys」に並んでいる鍵と見比べます。GitHubに同じ鍵がなければ、公開鍵をGitHubに登録します。どの鍵が使われているかをくわしく見るときは、出力を増やして接続します。

ssh -vT git@github.com

出力に Offering public key の行があれば、その鍵を渡しています。No more authentication methods to try. のあとに Permission denied (publickey). が出ていて、鍵を渡す行がなければ、SSHは使える鍵を見つけられていません。

鍵がないときは作って登録する

メールアドレスは、自分のGitHubのメールアドレスに変えます。保存場所を聞かれたらEnterでそのままにし、パスフレーズを決めます。前に作った鍵があり、上書きするかを聞かれたときは、上書きせずに別のファイル名で作ります。

ssh-keygen -t ed25519 -C "your_email@example.com"

作った鍵をSSHエージェントに入れます。手順はLinuxとmacOSで違います。

Linuxの場合は、SSHエージェントを動かしてから鍵を入れます。

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

macOSの場合は、SSHエージェントを動かしたあと、~/.ssh/config に設定を書いてから鍵を入れます。macOS Sierra 10.12.2以降では、この設定で鍵が自動でエージェントに読み込まれ、パスフレーズがキーチェーンに保存されます。ssh-add は、MacPortsやHomebrewなどで入れたものではなく、macOSにはじめから入っているものを使います。

eval "$(ssh-agent -s)"

まず、~/.ssh/config があるかを確かめます。

open ~/.ssh/config

ファイルがないと表示されたら、作ります。

touch ~/.ssh/config

~/.ssh/config を開き、次の内容にします。鍵のファイル名や場所が違うときは、IdentityFile の行を自分の鍵に合わせます。鍵にパスフレーズを付けていない場合は、UseKeychain の行を省きます。

Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

Bad configuration option: usekeychain というエラーが出るときは、IgnoreUnknown UseKeychain の行を足します。

Host github.com
  IgnoreUnknown UseKeychain

最後に、鍵をエージェントに入れ、パスフレーズをキーチェーンに保存します。鍵の名前が違うときは、id_ed25519 を自分の秘密鍵のファイル名に変えます。鍵にパスフレーズを付けていない場合は、--apple-use-keychain を付けずに打ちます。

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Monterey(12.0)より前のmacOSでは、--apple-use-keychain の代わりに -K を使います。

WindowsのPowerShellでの手順は、GitHubの「Generating a new SSH key and adding it to the ssh-agent」にあります。鍵を入れたら、公開鍵(.pub の付いたファイル)をGitHubの「SSH and GPG keys」に登録し、最初の接続確認をもう一度行います。

sudoを付けない

GitHubは、Gitのコマンドにsudoや管理者権限を付けないよう書いています。sudoなしで作った鍵は、sudoを付けてpushすると使われません。

会社などのネットワークでSSHのポート(22)がつながらない場合は、HTTPSのポートでSSHを使う方法がGitHubのドキュメントにあります。

HTTPSとSSHを切り替える(git remote set-url)

手元のリポジトリを、HTTPSからSSHに切り替えるときは次のように打ちます。

git remote set-url origin git@github.com:OWNER/REPOSITORY.git

SSHからHTTPSに戻すときは、URLをHTTPSのものにします。

git remote set-url origin https://github.com/OWNER/REPOSITORY.git

切り替えたら、もう一度URLを確かめます。

git remote -v

PATはHTTPSでしか使えないので、PATを使いたいときはHTTPSのURLに、SSHの鍵を使いたいときはSSHのURLにします。

GitHub ActionsやCIのcloneで認証を設定する

10月19日の案内では、自動のcloneやfetchを止まりにくくするために、認証を設定するようすすめています。

  • GitHub Actions:組み込みの GITHUB_TOKEN を使う
  • ほかのCI:GitHub Appのインストールアクセストークンを使う。個人用アクセストークンも使える
  • 認証できない操作:保護が解けてからやり直す

GITHUB_TOKEN は、ワークフローがあるリポジトリの中のものにしか使えません。権限はワークフローの permissions で必要な分だけにしぼります。読むだけなら次のようにします。

permissions:
  contents: read

ほかのリポジトリも読む必要があるときは、GitHub Appのトークンか、PATをリポジトリのシークレットに入れて使います。ActionsやCIのしくみは「GitHub Actionsの基礎から始めるCI/CD入門」に、ワークフローを守る設定は「GitHub Actionsのロックファイル(actions.lock)とは?」にあります。

トークンとSSHの鍵の扱いで気をつけること

  • PATはパスワードと同じように扱います。人に見せたり、チャット・Issue・スクリーンショットに貼ったりしません。質問するときにエラーを貼る場合も、トークンが写っていないかを見ます
  • トークンは必要なリポジトリと権限だけにしぼり、有効期限を付けます。使わなくなったトークンは「Developer settings」から削除します
  • SSHの秘密鍵(.pub の付いていないほう)は人に渡しません。GitHubに登録するのは公開鍵だけです
  • GitHubの「SSH and GPG keys」に覚えのない鍵があったら、すぐに削除して、GitHub Supportに相談するようGitHubはすすめています
  • Gitの「store」helperはトークンを暗号化せずに保存します。迷ったら、GitHubがすすめるGitHub CLIかGCMで保存します

関連記事

参考(公式ドキュメント)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次