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-agentへの鍵追加を自動化して楽をしよう!

「よし、SSH設定も完了したし、これで楽になる!」と思ったのもつかの間…またパソコンを再起動したら「Permission denied」が復活!まるでモグラ叩きゲームのようですね。😅

これは、SSH鍵がssh-agentから消えてしまったのが原因です。毎回手動でssh-addを実行するのは、まるで毎朝歯を磨くたびに「今日も歯ブラシってこうやって使うんだっけ?」と考えているようなもの。面倒すぎます!

💡 なぜ自動化が必要なの?

ssh-agentは一時的にSSH鍵を記憶してくれる便利な執事のような存在ですが、パソコンを再起動すると記憶をリセットしてしまいます。つまり、毎回以下のコマンドを手動で実行する羽目に…

ssh-add ~/.ssh/id_rsa_work
ssh-add ~/.ssh/id_rsa_personal

これを忘れると、またあの憎き「Permission denied」が登場します。

🚀 自動化の魔法をかけよう!

方法1: SSH設定ファイルで自動読み込み(🍎 Macのみ)

~/.ssh/configファイルに以下を追加するだけで、自動的に鍵が読み込まれます:

# 仕事用アカウント設定
Host github.com-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_work
    AddKeysToAgent yes
    UseKeychain yes  # macOSの場合のみ

# 個人用アカウント設定 
Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal
    AddKeysToAgent yes
    UseKeychain yes  # macOSの場合のみ

AddKeysToAgent yesが自動化の鍵(しゃれです)!これで初回接続時に自動的にssh-agentに鍵が追加されます。

方法2: シェル起動時に自動実行(🪟 Windows・🍎 Mac・🐧 Linux)

.bashrc.zshrc(お使いのシェルによって異なります)に以下を追加:

# SSH-Agent自動起動スクリプト
if [ -z "$SSH_AUTH_SOCK" ]; then
    echo "🔑 SSH-Agentを起動中..."
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa_work 2>/dev/null
    ssh-add ~/.ssh/id_rsa_personal 2>/dev/null
    echo "✅ SSH鍵の準備完了!"
fi

これで、ターミナルを開くたびに自動的にSSH鍵が読み込まれます。まるで玄関のドアを開けると自動的に電気がつくセンサーライトのようですね!

🔍 動作確認してみよう

設定後、以下のコマンドで確認できます:

# 現在読み込まれている鍵を確認
ssh-add -l

# 実際に接続テスト
ssh -T git@github.com-work
ssh -T git@github.com-personal

「Hi [ユーザー名]! You’ve successfully authenticated…」と表示されれば成功です!🎉

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

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

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

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

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

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



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