症状

git pushgit pull 実行時に「Permission denied (publickey)」と表示され、リモートリポジトリに接続できない。

結論:まずこれを確認

  1. SSH鍵が存在するか確認:ls -la ~/.ssh/
  2. GitHubに鍵が登録されているか確認:ssh -T git@github.com
  3. 正しい鍵が使われているか確認:ssh-add -l

操作フロー

    flowchart TD
    A[Permission denied発生] --> B{SSH鍵は存在する?}
    B -->|No| C[SSH鍵を生成する]
    B -->|Yes| D{ssh-agentに登録済み?}
    D -->|No| E[ssh-addで鍵を登録]
    D -->|Yes| F{GitHubに公開鍵登録済み?}
    F -->|No| G[GitHubに公開鍵を登録]
    F -->|Yes| H{リモートURLはSSH形式?}
    H -->|No| I[URLをSSH形式に変更]
    H -->|Yes| J[~/.ssh/configを確認]
    C --> D
    E --> F
    G --> K[接続テスト]
    I --> K
    J --> K
    K --> L{成功?}
    L -->|Yes| M[完了]
    L -->|No| N[鍵のパーミッション確認]
  

よくある原因

  • SSH鍵が存在しない - 鍵を一度も生成していない、または別のPCで作成した鍵を移行していない
  • ssh-agentに鍵が登録されていない - 鍵ファイルはあるが、認証エージェントに読み込まれていない
  • GitHubに公開鍵が登録されていない - ローカルの鍵とGitHub側の登録が紐づいていない
  • リモートURLがHTTPS形式になっている - SSH認証ではなくHTTPS認証が使われている
  • 鍵ファイルのパーミッションが不正 - 秘密鍵が他ユーザーから読める状態になっている
  • ~/.ssh/configの設定ミス - 複数鍵を使い分ける設定に誤りがある
  • GitHubアカウントが異なる - 別アカウントの鍵が優先されている

操作手順

ステップ1: SSH鍵の存在を確認する

    ls -la ~/.ssh/
  

🔍 チェックポイント: id_ed25519id_ed25519.pub(または id_rsaid_rsa.pub)が表示されれば鍵は存在する

鍵が存在しない場合は生成する:

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

ステップ2: ssh-agentに鍵を登録する

ssh-agentを起動する:

    eval "$(ssh-agent -s)"
  

🔍 チェックポイント: Agent pid 12345 のような出力が表示される

鍵を登録する:

    ssh-add ~/.ssh/id_ed25519
  

登録済みの鍵を確認する:

    ssh-add -l
  

🔍 チェックポイント: 鍵のフィンガープリントが表示されれば登録済み。The agent has no identities. と表示される場合は未登録

ステップ3: GitHubへの接続をテストする

    ssh -T git@github.com
  

🔍 チェックポイント: Hi username! You've successfully authenticated... と表示されれば接続成功

Permission denied が表示される場合はステップ4へ進む。

ステップ4: 公開鍵をGitHubに登録する

公開鍵の内容をコピーする:

    cat ~/.ssh/id_ed25519.pub
  
  1. GitHub → Settings → SSH and GPG keys → New SSH key
  2. Titleに識別用の名前を入力(例:MacBook Pro 2024
  3. Keyに公開鍵の内容を貼り付け
  4. Add SSH key をクリック

登録後、再度接続テストを実行する:

    ssh -T git@github.com
  

ステップ5: リモートURLを確認する

    git remote -v
  

🔍 チェックポイント: URLが git@github.com:username/repo.git 形式であればSSH。https://github.com/... の場合はHTTPS形式

HTTPS形式の場合、SSH形式に変更する:

    git remote set-url origin git@github.com:username/repository.git
  

ステップ6: 鍵ファイルのパーミッションを確認する

    ls -la ~/.ssh/
  

🔍 チェックポイント: 秘密鍵(id_ed25519)は -rw-------(600)、公開鍵は -rw-r--r--(644)が正常

パーミッションを修正する:

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

NG行動

  • 秘密鍵(id_ed25519)を他人に共有する - 秘密鍵が漏洩するとリポジトリに不正アクセスされる可能性がある
  • パーミッションを777に設定する - SSHは安全でないパーミッションの鍵を拒否する
  • 公開鍵と秘密鍵を間違えてGitHubに登録する - 登録するのは .pub が付いた公開鍵のみ
  • パスフレーズなしで鍵を生成する(共有PC) - 他者がその鍵を使用できてしまう

よくある質問(FAQ)

Q1: 複数のGitHubアカウントを使い分けるには?

A: ~/.ssh/config で Host を分けて設定する。

    Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  

リモートURLは git@github-work:org/repo.git のように指定する。

Q2: 「WARNING: UNPROTECTED PRIVATE KEY FILE!」と表示される

A: 秘密鍵のパーミッションが緩すぎる。chmod 600 ~/.ssh/id_ed25519 で修正する。

Q3: ssh-addしても再起動すると消える

A: ~/.ssh/config に以下を追加する(macOSの場合):

    Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
  

関連するトラブル

準備中

解決しない場合

  • GitHub公式ドキュメント: https://docs.github.com/ja/authentication/troubleshooting-ssh
  • 詳細なデバッグ出力を確認する:ssh -vT git@github.com
  • 確認すべきログ:~/.ssh/config の設定内容
  • 次に調べるキーワード:「GitHub SSH 複数アカウント」「ssh-agent 自動起動」「known_hosts 削除」