エラーの発生状況誰にでも起こり得ることです。長時間のコーディングを終え、いざ git push origin main を実行したとき、成功を示すバーの代わりにターミナルに立ちはだかる壁があります。
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
このエラーは、MacがSSH経由でGitHubなどのサーバーに接続しようとしたものの、ハンドシェイク(接続の確立)に失敗したことを意味します。サーバー側が認識できる公開鍵が見つからなかったか、あるいはマシン側が鍵を提示しなかったかのどちらかです。これは、特にmacOSのアップデート後や新しいMacBook Proのセットアップ時によく遭遇する問題です。
macOSでこのエラーが発生する理由macOS SonomaやVenturaでは、通常以下の4つの原因が考えられます。
- 鍵の欠如: SSHキーペアをまだ生成していない。- 紐付けの未完了: ローカルに鍵は存在するが、GitHubやGitLabのプロファイルにアップロードされていない。- 再起動によるリセット: macOSのSSHエージェントが、コンピュータの再起動後に鍵を「忘れて」しまう。- 厳格な権限設定: SSHはセキュリティに非常に敏感です。
.sshフォルダの権限が緩すぎる(他のユーザーがアクセス可能)場合、macOSはセキュリティのために鍵を完全に無視します。## ステップ1:既存のSSHキーを確認する必要がないのに重複して作成して時間を無駄にしないようにしましょう。まず、以下のコマンドを実行して、すでに何があるかを確認します。
ls -al ~/.ssh
リストの中に id_ed25519.pub または id_rsa.pub があるか確認してください。これらのファイルがあれば、準備は半分完了です。ステップ3に進んでください。ディレクトリがない、あるいは空の場合は、新しく作成する必要があります。
ステップ2:新しいSSHキーを生成する現代のセキュリティ標準では、Ed25519アルゴリズムが推奨されています。古いRSA標準よりも高速で安全です。以下のコマンドで鍵を生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
Enterキーを押して、デフォルトの保存場所(/Users/ユーザー名/.ssh/id_ed25519)を承認します。パスフレーズを求められたら入力してください。これは、万が一ノートPCを紛失したり盗まれたりした場合の重要なセキュリティ層となります。
ステップ3:macOS SSHエージェントの設定これはMacユーザーが最も陥りやすいポイントです。鍵が存在していても、指示されない限りmacOSは自動的にそれを使用しません。まず、バックグラウンドでエージェントを起動します。
eval "$(ssh-agent -s)"
次に、再起動後もこの設定が維持されるように恒久化する必要があります。SSH設定ファイルを作成、または開きます。
nano ~/.ssh/config
エディタに以下の内容を貼り付けます。
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
注意:古いRSAキーを使用している場合は、最後の行を ~/.ssh/id_rsa に変更してください。
Ctrl+O、Enter、Ctrl+X を押して保存し、終了します。最後に、鍵をmacOSのキーチェーンに紐付けます。
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
ステップ4:公開鍵をアップロードするGitHubに、その鍵があなたのものであることを知らせる必要があります。以下のショートカットを使って、公開鍵の内容をクリップボードに直接コピーします。
pbcopy < ~/.ssh/id_ed25519.pub
```- GitHubの**Settings**(設定)に移動します。- 左サイドバーの**SSH and GPG keys**をクリックします。- **New SSH Key**を選択します。- 「M3 MacBook Air - Office」のように分かりやすいラベルを付け、**Key**フィールドにコードを貼り付けます。## ステップ5:ファイル権限を厳格にする権限設定が間違っていると、SSHはエラーを出さずに失敗します。`.ssh` フォルダはプライベートな保管庫であるべきです。ディレクトリを `700`(自分のみ読み取り/書き込み/実行可能)、鍵を `600`(自分のみ読み取り/書き込み可能)に設定します。
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519
これらの数値の意味が分からない場合は、[Unix Permissions Calculator](https://toolcraft.app/en/tools/developer/unix-permissions)(Unix権限計算機)がビットマスクを視覚化するのに役立ちます。例えば、`600` は「Group」や「World」のユーザーがあなたのプライベートデータを除き見ることすらできないようにします。
## ステップ6:動作確認実際にコードをプッシュせずに、接続をテストします。
ssh -T git@github.com
設定が成功していれば、次のように表示されます:*「Hi [ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.」*
### クイックトラブルシューティング- **プロトコルの間違い:** リモートURLを再確認してください。`git remote -v` を実行します。もし `https://` で始まっている場合、SSHキーは使用されません。`git remote set-url origin git@github.com:ユーザー名/リポジトリ名.git` を使って切り替えてください。- **複数アカウント:** 仕事用と個人用のアカウントを併用している場合は、識別の混乱を避けるために `~/.ssh/config` にそれぞれ個別の `Host` エントリを設定する必要があります。

