permission denied (publickey) の原因と解決方法【GitHub】

git
\ Gitがよく分からない初心者の方へ /
さわっておぼえるGit入門
Gitがよく分からない初心者でも、
この1冊で基本操作を一通り理解できます。
👉 Amazonで詳しく見る
Kindle Unlimitedなら無料で読めます
▶ 無料で読む(Kindle Unlimited)

今回は、GitHubへのプッシュやクローン時に発生するpermission denied (publickey)エラーの原因と解決方法について解説します。
Gitを使っていると、次のようなエラーで困ったことはありませんか?

Permission denied (publickey).
fatal: Could not read from remote repository.
  • pushやcloneができない
  • 急にエラーが出るようになった
  • SSHの設定がよく分からない

結論から言うと、このエラーはSSH認証が正しく設定されていないことが原因です。

この記事では、初心者でも分かるように
原因 → 解決方法 → 確認手順まで順番に解説します。

permission denied (publickey) の原因

このエラーは、GitHubにSSH接続する際に、公開鍵認証に失敗している状態です。
主な原因は以下です。

よくある原因一覧

  • SSHキーを作成していない
  • 公開鍵をGitHubに登録していない
  • SSHキーのパスが違う
  • SSHエージェントが起動していない
  • HTTPSとSSHのURLを間違えている

自分のPCにある秘密鍵(ペアの片方)と、GitHubに渡した公開鍵(もう片方)が合致することで
初めてクローンやプッシュができるようになります。

解決方法①:SSHキーを作成する

まずはSSHキーが存在するか確認します。
ユーザーの.sshディレクトリに作成していればあるはずなので、下記コマンドで確かめてみましょう。

ls ~/.ssh

id_rsaid_ed25519 がなければ、作成します。

※ここからのコマンドについてはWindowsの場合はGit Bashで実行してください

SSHキーの作成コマンド

SSHキーがない場合には、下記のコマンドで作成することができます。
your_email@example.comの箇所には、GitHubで使う予定のメールアドレスを設定しましょう。

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

入力を求められた場合は、基本は空エンターで進めてOKです。

解決方法②:公開鍵をGitHubに登録する

作成した公開鍵をGitHubに登録します。

公開鍵の確認

作成した鍵を表示してコピーしておきます。

cat ~/.ssh/id_ed25519.pub

catコマンドで表示された内容をコピーします。
VSCodeなどエディタで開いてコピーでもOKです。

GitHub側の設定

コピーした鍵をGitHubに登録します。

  1. GitHubにログイン
  2. Settings
  3. SSH and GPG keys
  4. New SSH key

ここにコピーした公開鍵を貼り付けます。
タイトルも入力して、Add SSH Keyでキーを追加します。

GitHubのSSHキー設定

解決方法③:SSHエージェントを起動する

鍵を作っただけでは、Gitが「どの鍵を使えばいいのか」迷ってしまうことがあります。
そこで、SSHエージェント(鍵の管理係)を起動して、作成した鍵を認識させましょう。

SSHキーを読み込ませます。

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

「PCを再起動したらまたエラーが出るようになった」という場合は、もう一度この手順を実行するか、後述の~/.ssh/config設定を行ってください。

解決方法④:接続確認をする

以下のコマンドで接続テストを行います。

ssh -T git@github.com

成功すると以下が表示されます。

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

usernameのところに、GitHubのユーザー名が表示されます。

解決方法⑤:リモートURLを確認する

HTTPSのURLになっているとSSHは使えません。

確認コマンド

対象のリポジトリの配下で、下記コマンドを使います。

git remote -v

そうすると、接続先のリモートURLの設定が表示されます。

SSHに変更する

HTTPSだった場合は、下記のコマンドで再設定ができます。

git remote set-url origin git@github.com:ユーザー名/リポジトリ名.git

それでも解決しない場合

それでも解決しない場合には、以下もチェックしてください。

鍵の権限が正しくない

アクセス権限がおかしい場合は、下記のコマンドで設定できます。

chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

configファイルの設定

通常はなくても接続できるはずですが
接続できない場合は~/.ssh/configにファイルを作成し、config設定をしてみましょう。

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

まとめ

permission denied (publickey) の原因は、ほぼ以下のどれかです。

  • SSHキー未作成
  • GitHubに未登録
  • SSHエージェント未起動
  • リモートURLの設定ミス

迷ったらこの順番で確認すれば解決できるかと思います。
ひとつずつ確認してみましょう。

コメント