こんにちは、フルスタックエンジニアのryuです。
今回の記事では、GitでPermission denied (publickey).というエラーが発生した際の対処方法を解説します。
私も以前、SSHキーを作り直してGitHubへ登録したのに、なぜかgit pushができないことがありました。そのときの原因は、秘密鍵がssh-agentに読み込まれていなかったことでした。
ただし、このエラーは秘密鍵の読み込みだけが原因ではありません。SSHの接続先やGitHubへ登録した公開鍵なども順番に確認します。
【Git】Permission deniedのエラーの対処方法解説¶
今回のエラーでは、Gitで下記のエラーが発生した場合の対処方法を解説します。
git@github.com: Permission denied (publickey).
このエラーは、GitHubへSSH接続しようとしたものの、公開鍵認証に成功しなかった場合に表示されます。
鍵を作り直せば必ず直るわけではありません。まず現在のSSH設定を確認して、どこで認証に失敗しているのかを切り分けていきましょう。
Permission denied (publickey)が出る主な原因¶
GitHubへSSHで接続するときは、ローカルPCに秘密鍵を置き、対応する公開鍵をGitHubへ登録します。
仕組みについて詳しく知りたい方は、【関連記事】公開鍵暗号方式をわかりやすく解説も参考にしてください。
今回のエラーで確認したいポイントをまとめると、次のようになります。
| 確認すること | よくある状態 |
|---|---|
| SSH接続先 | git@github.comではないユーザー名を使っている |
| SSHキー | ~/.sshに鍵が存在しない |
| ssh-agent | 秘密鍵が読み込まれていない |
| GitHub側 | 公開鍵をGitHubへ登録していない |
| リモートURL | HTTPSとSSHを勘違いしている |
| 複数の鍵 | 意図していない秘密鍵が選択されている |
まずは一つずつ確認していきましょう。
ssh -TでGitHubへ接続できるか確認する¶
GitHubへのSSH接続をテストする¶
最初に、Git Bashやターミナルを開いて次のコマンドを実行します。
ssh -T git@github.com
SSHの設定が正常であれば、GitHubのユーザー名を含む認証成功のメッセージが表示されます。
一方、設定に問題がある場合は次のように表示されます。
git@github.com: Permission denied (publickey).
git pushでエラーが出ている場合も、まずssh -Tで同じエラーになるか確認しましょう。
SSHコマンド自体に慣れていない方は、【関連記事】sshコマンドの使い方を解説!リモートのサーバーを操作しようもご覧ください。
ssh-agentに秘密鍵が読み込まれているか確認する¶
Permission deniedは秘密鍵がロードされていなかったから¶
まず、エラーの確認です。Git Bashやターミナルを開いてください。
git pushやssh -T git@github.comでGitHubにアクセスしようとすると、下記の画面のようにエラーが発生しました。

ssh-add -l -E sha256
次のように表示されることがあります。
The agent has no identities.

秘密鍵のファイルそのものが存在しない、という意味ではない点に注意してください。
ssh-agentを起動する¶
ssh-addを実行してもssh-agentへ接続できない場合は、まずssh-agentを起動します。
Linux、macOS、Git Bashなどでは、次のように起動できます。
eval "$(ssh-agent -s)"
次に、秘密鍵を追加します。
下記のコマンドで秘密鍵を追加しましょう。
ssh-add ~/.ssh/id_ed25519
別のファイル名を使っている場合は、その秘密鍵を指定します。
ssh-add ~/.ssh/[秘密鍵のファイル名]
ここで指定するのは.pubが付いていない方です。
id_ed25519が秘密鍵、id_ed25519.pubが公開鍵です。秘密鍵は第三者へ共有しないようにしてください。

追加できたら、もう一度確認します。
ssh-add -l -E sha256
鍵のフィンガープリントが表示されれば、ssh-agentへ読み込まれています。
その後、もう一度GitHubへ接続します。
ssh -T git@github.com
これで、Githubへの接続ができるようになりました。

ssh-addで直らない場合に確認すること¶
秘密鍵を読み込んでも直らない場合は、別の原因を確認します。
~/.sshにSSHキーがあるか確認する¶
まず、SSHキーが存在しているか確認しましょう。
ls -al ~/.ssh
たとえば、Ed25519形式の鍵であれば次のようなファイルがあります。
id_ed25519
id_ed25519.pub
秘密鍵と公開鍵がない場合は、新しくSSHキーを作成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
画面の案内に沿って保存場所やパスフレーズを設定してください。
すでに利用中の鍵がある場合は、何も確認せず上書きしないようにしましょう。
公開鍵がGitHubに登録されているか確認する¶
公開鍵がGitHubへ登録されているかも確認します。内容は次のように表示できます。
cat ~/.ssh/id_ed25519.pub
表示された公開鍵をGitHubのSettingsからSSH and GPG keysへ登録します。
登録するのは.pubが付いた公開鍵です。秘密鍵の内容は登録しません。
GitHubにはgitユーザーで接続する¶
GitHubへSSH接続するときは、自分のGitHubユーザー名をSSHのユーザー名として指定するのではなく、gitを使います。
正しい例は次の通りです。
ssh -T git@github.com
たとえば、自分のGitHubユーザー名がryuであっても、次のようにはしません。
ssh -T ryu@github.com
GitHubへSSH接続するときのユーザー名はgitと覚えておきましょう。
GitのリモートURLも確認する¶
git pushだけ失敗する場合は、リモートURLも確認します。
git remote -v
SSH接続を利用している場合は、次のような形式になっています。
git@github.com:example/sample.git
HTTPSの場合は次のような形式です。
https://github.com/example/sample.git
SSH形式へ変更したい場合は、URLを確認して次のように変更できます。
git remote set-url origin git@github.com:example/sample.git
Gitそのもののインストールや基本操作から確認したい方は、【関連記事】gitコマンドのインストール方法を解説!Linuxでgitを使おうも参考にしてください。
複数のSSHキーがある場合は-vで確認する¶
仕事用と個人用など、複数のSSHキーを使っていると、GitHubへ送信している鍵が想定と違うことがあります。
その場合は、-vを付けてSSHの詳細なログを確認できます。
ssh -vT git@github.com
出力の中から、どの秘密鍵を試しているのか確認します。
必要に応じて~/.ssh/configで利用する鍵を指定する方法もあります。
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
設定を変更したら、再び次のコマンドで確認しましょう。
ssh -T git@github.com
参考:その他の原因の場合¶
これ以外でもエラーが出続ける場合は、GitHub公式ドキュメントも確認してください。
Error: Permission denied (publickey) – GitHub Docs
GitHub公式でも、接続先、gitユーザー、SSHキー、公開鍵の登録などを順番に確認できます。
LinuxやSSHを実際に操作しながら学習する¶
GitのSSH認証では、ssh、ファイルパス、公開鍵・秘密鍵、権限などLinuxの知識が登場します。
InfraAcademyでは、Linuxの基本操作からネットワーク、AWSまで、ブラウザ上で実際に操作しながら学習できます。
Linuxのコマンドやファイル操作から学びたい方は、Linux入門講座をご覧ください。
SSHを理解するうえでも重要なIPアドレスや通信の仕組みは、ネットワーク講座で学習できます。
さらに、クラウド上のLinuxサーバーを扱いたい方は、AWS講座もおすすめです。
【Git】Permission deniedのエラーまとめ¶
今回の記事では、GitでPermission denied (publickey)が発生した場合の対処方法について解説しました。
私の場合は、SSHキー自体は作成できていましたが、秘密鍵がssh-agentへ読み込まれていないことが原因でした。
まずは次のコマンドで、GitHubへの接続を確認してみましょう。
ssh -T git@github.com
エラーになる場合は、ssh-agentへ読み込まれている鍵を確認します。
ssh-add -l -E sha256
鍵が読み込まれていなければ、ssh-agentを起動して秘密鍵を追加します。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
それでも直らない場合は、公開鍵の登録、gitユーザー、リモートURL、利用している秘密鍵を順番に確認してください。
鍵を何度も作り直す前に、一つずつ原因を切り分けていきましょう。





