Git

「Permission denied (publickey)」エラーを即解決!複数GitHubアカウントのSSH設定術

この記事で紹介すること
  • git clone コマンドを実行した時に起こるエラーについて
  • Permission denied (publickey) エラーの解決方法
  • Windows・Mac・Linux 各OS別の解決方法

🔥 問題提起:月曜朝9時の悲劇

やる気のある人

「よし、今日から新しいプロジェクトだ!」

意気揚々とgit cloneを実行したあなた。しかし、画面に現れたのは冷たい赤文字のエラーメッセージ。

やる気のあった人

「なんだよこれ!」

Permission denied (publickey).
fatal: Could not read from remote repository.

まるで「お前には入る資格がない」と門前払いされたような気分。隣の席の同僚はスムーズに作業を始めているのに、自分だけなぜ…?

実はこれ、一台のPCで仕事用と個人用のGitHubアカウントを使い分けている人の90%が経験する「あるある」なんです。金曜日まで動いていたのに、月曜日になったら急に動かない。まるでPCが週末の間に記憶喪失になったかのよう。

🤔 疑問提示:なぜこんなことが起きるのか?

想像してみてください。あなたの家に「仕事用の鍵」と「プライベート用の鍵」があるとします。でも、玄関のドアは一つしかない。GitHubも同じで、PCは基本的に「一つの鍵(SSHキー)」しか使えないと思い込んでいるんです。

よくある失敗パターン:

  • 金曜日:個人プロジェクトをいじって、SSHキーを個人用に設定
  • 月曜日:仕事のリポジトリにアクセスしようとして「誰だお前は!」と拒否される

「じゃあ毎回鍵を付け替えるの?」と思ったあなた。いいえ、賢い方法があります。それは「鍵束」を作ること。PCに「この家には仕事用の鍵を、あの家には個人用の鍵を使ってね」と教えてあげるんです。

💡 解決策:SSH設定の魔法の呪文

実は、SSHには「config」という名前の執事がいます。この執事に「どのGitHubアカウントにはどの鍵を使うか」を覚えてもらえばいいんです。

ステップ1:鍵を2本作る(まだ作ってない人向け)

🪟 Windows (Git Bash)

# Git Bashを管理者として実行してから
# 仕事用の鍵を作成
ssh-keygen -t ed25519 -C "your-work@email.com" -f /c/Users/$USERNAME/.ssh/id_ed25519_work

# 個人用の鍵を作成  
ssh-keygen -t ed25519 -C "your-personal@email.com" -f /c/Users/$USERNAME/.ssh/id_ed25519_personal

🍎 Mac / 🐧 Linux

# 仕事用の鍵を作成
ssh-keygen -t ed25519 -C "your-work@email.com" -f ~/.ssh/id_ed25519_work

# 個人用の鍵を作成  
ssh-keygen -t ed25519 -C "your-personal@email.com" -f ~/.ssh/id_ed25519_personal

パスフレーズを聞かれたら、セキュリティのために設定することをおすすめしますが、面倒な人は Enter キーを押してスキップも可能です(でも本当は設定した方がいいですよ!)。

🪟 Windows特有のトラブル対策

  • 「Permission denied」エラーが出る場合は、Git Bashを管理者権限で実行
  • SSH Agentが動いていない場合は eval $(ssh-agent -s) を実行

ステップ2:GitHubに公開鍵を登録

🪟 Windows

# PowerShellで公開鍵を表示
type C:\Users\$env:USERNAME\.ssh\id_ed25519_work.pub

# Git Bashの場合
cat ~/.ssh/id_ed25519_work.pub

🍎 Mac

# 公開鍵をクリップボードにコピー(便利!)
pbcopy < ~/.ssh/id_ed25519_work.pub
# または表示して手動コピー
cat ~/.ssh/id_ed25519_work.pub

🐧 Linux

# 表示して手動コピー
cat ~/.ssh/id_ed25519_work.pub
# xclipがインストールされている場合はクリップボードにコピー可能
xclip -sel clip < ~/.ssh/id_ed25519_work.pub

その後の手順(全OS共通):

  1. 仕事用アカウントでGitHubにログイン
  2. Settings → SSH and GPG keys → New SSH key
  3. コピーした内容を貼り付け
  4. 個人用アカウントも①~③と同様に設定
    (ここでは個人用のid_ed25519_personal.pubを使用)

🛠️ 具体的対応法:OS別のconfigファイル設定

ここからが本番!OSによってファイルの場所や編集方法が異なるので、お使いの環境に合わせて設定してください。

🪟 Windows編(Git Bash/PowerShell)

configファイルの場所: C:\Users\あなたのユーザー名\.ssh\config

# PowerShellの場合
notepad C:\Users\$env:USERNAME\.ssh\config

# Git Bashの場合
nano ~/.ssh/config

Windowsの注意点

  • Git for Windowsをインストールしていることが前提
  • メモ帳で編集する場合、拡張子なしで保存することが重要(config.txtにならないよう注意)

🍎 Mac編(Terminal)

configファイルの場所: /Users/あなたのユーザー名/.ssh/config

# テキストエディタで開く(TextEditを使用)
open -e ~/.ssh/config

# またはターミナルエディタを使用
nano ~/.ssh/config
# もしくは
vim ~/.ssh/config

Macの注意点

  • Finderで隠しファイルを表示するには Cmd + Shift + .
  • 権限エラーが出る場合は sudo を使用

🐧 Linux編(Terminal)

configファイルの場所: /home/あなたのユーザー名/.ssh/config

# お好みのエディタで開く
nano ~/.ssh/config
# または
vi ~/.ssh/config

Linuxの注意点

  • ファイルの権限を適切に設定(chmod 600 ~/.ssh/config
  • WSL2の場合はWindows側とLinux側で別々のSSH設定になる

📝 共通:configファイルの内容

# 仕事用GitHubアカウント
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

# 個人用GitHubアカウント  
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal
    IdentitiesOnly yes

Windows特有の設定

# Windowsの場合、フルパスで指定することも可能
Host github-work
    HostName github.com
    User git
    IdentityFile C:/Users/あなたのユーザー名/.ssh/id_ed25519_work
    IdentitiesOnly yes

📍 権限の設定(重要!)

🪟 Windows

Git Bashで実行:

chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_ed25519_*
chmod 644 ~/.ssh/id_ed25519_*.pub

🍎 Mac / 🐧 Linux

# configファイルの権限設定
chmod 600 ~/.ssh/config
# 秘密鍵の権限設定
chmod 600 ~/.ssh/id_ed25519_*
# 公開鍵の権限設定
chmod 644 ~/.ssh/id_ed25519_*.pub

なぜ権限設定が必要?
SSHは秘密鍵のセキュリティに厳しく、他のユーザーから読み取り可能な状態だと「安全じゃない!」と判断して動作を拒否します。

使い方のコツ:URLを少し変えるだけ!

通常のcloneコマンド:

git clone git@github.com:company/project.git

複数アカウント対応版:

# 仕事用
git clone git@github-work:company/project.git

# 個人用
git clone git@github-personal:myname/hobby-project.git

ポイントは github.comgithub-workgithub-personal に置き換えるだけ!

既存のリポジトリを修正する場合

🪟 Windows (Git Bash/PowerShell)

# 現在の設定を確認
git remote -v

# リモートURLを変更(仕事用の例)
git remote set-url origin git@github-work:company/project.git

🍎 Mac / 🐧 Linux

# 現在の設定を確認
git remote -v

# リモートURLを変更(仕事用の例)
git remote set-url origin git@github-work:company/project.git

🔧 接続テストの方法(全OS共通)

設定が正しく動作するか確認:

# 仕事用アカウントのテスト
ssh -T github-work

# 個人用アカウントのテスト
ssh -T github-personal

成功すると以下のようなメッセージが表示されます:

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

トラブルシューティング

  • 🪟 Windows: SSH Agentが起動していない場合は ssh-agent bash を実行してから再試行
  • 🍎 Mac: キーチェーンに古い認証情報が残っている場合は ssh-add -D でクリア
  • 🐧 Linux: SELinuxが有効な場合は restorecon -Rv ~/.ssh で権限を修正

🎯 まとめ:もう月曜日は怖くない

おめでとうございます!これであなたは「SSH設定マスター」の称号を手に入れました。

覚えておくべきポイント:

  1. 複数の鍵を作る(仕事用・個人用)
  2. ~/.ssh/configで交通整理(どの鍵をどこで使うか指定)
  3. URLのgithub.comを置き換える(github-work、github-personalなど)

これで「Permission denied」の恐怖から解放されます。月曜日の朝、颯爽とgit cloneできるあなたを見て、同僚は「おっ、デキる人だな」と思うことでしょう。

最後に一つアドバイス:この設定、一度やれば永続的に使えますが、新しいPCに移行するときは設定ファイルのバックアップを忘れずに。未来の自分が「あの時の自分、グッジョブ!」と感謝する日が必ず来ますから。



エラーメッセージは敵じゃない。
解決方法を知らないだけの、ちょっと不器用な友達なんです。