MeWrite Docs

Permission denied (publickey)

SSH接続時に公開鍵認証に失敗した場合のエラー

概要

SSH接続時に公開鍵認証に失敗した場合に発生するエラーです。GitHubやサーバーへのSSH接続でよく見られます。

エラーメッセージ

Permission denied (publickey).
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
ssh: connect to host github.com port 22: Connection refused

原因

  1. SSHキーがない: SSHキーペアが生成されていない
  2. キーが登録されていない: GitHubやサーバーに公開鍵が登録されていない
  3. ssh-agentにキーがない: SSHエージェントにキーが追加されていない
  4. キーのパーミッション: 秘密鍵のパーミッションが不正
  5. 間違ったキー: 複数のキーがあり、正しいキーが使われていない
  6. ファイアウォール: ポート22がブロックされている

解決策

1. SSHキーの存在確認

1
2
3
4
5
6
# 既存のキーを確認
ls -la ~/.ssh/

# 一般的なキーファイル
# id_rsa / id_rsa.pub (RSA)
# id_ed25519 / id_ed25519.pub (Ed25519 - 推奨)

2. SSHキーの生成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Ed25519キーを生成(推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"

# RSAキーを生成(レガシーシステム用)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# FIDO2/ハードウェアキー対応(セキュリティ強化)
ssh-keygen -t ed25519-sk -C "your_email@example.com"

# パスフレーズを設定するかどうかは選択
# Enter file in which to save the key: (デフォルトでOK)
# Enter passphrase: (任意)

ベストプラクティス:

  • デバイスごとに異なるSSHキーを使用する
  • Ed25519を優先(RSAより高速で安全)
  • 高セキュリティ環境ではFIDO2対応キー(ed25519-sk)を検討

3. ssh-agentにキーを追加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ssh-agentを起動
eval "$(ssh-agent -s)"

# キーを追加
ssh-add ~/.ssh/id_ed25519
# または
ssh-add ~/.ssh/id_rsa

# 追加されたキーを確認
ssh-add -l

4. GitHubに公開鍵を登録

1
2
3
4
5
6
7
# 公開鍵をコピー
cat ~/.ssh/id_ed25519.pub
# または
pbcopy < ~/.ssh/id_ed25519.pub  # macOS

# GitHub > Settings > SSH and GPG keys > New SSH key
# 公開鍵を貼り付け

5. 接続テスト

1
2
3
4
5
6
7
8
# GitHubへの接続テスト
ssh -T git@github.com

# 成功時のメッセージ
# Hi username! You've successfully authenticated...

# 詳細なデバッグ
ssh -vT git@github.com

6. パーミッションの修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# .sshディレクトリのパーミッション
chmod 700 ~/.ssh

# 秘密鍵のパーミッション
chmod 600 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_rsa

# 公開鍵のパーミッション
chmod 644 ~/.ssh/id_ed25519.pub

# authorized_keys(サーバー側)
chmod 600 ~/.ssh/authorized_keys

7. ~/.ssh/config の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# ~/.ssh/config
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

# 会社用GitHub
Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

# 使用例
git clone git@github-work:company/repo.git

8. 複数キーの管理

1
2
3
4
5
# 複数のキーがある場合、特定のキーを指定
ssh -i ~/.ssh/id_ed25519_work git@github.com

# Gitでリポジトリ単位で設定
git config core.sshCommand "ssh -i ~/.ssh/id_ed25519_work"

9. ポート22がブロックされている場合

1
2
3
4
5
6
# ~/.ssh/config
Host github.com
  HostName ssh.github.com
  Port 443
  User git
  IdentityFile ~/.ssh/id_ed25519
1
2
# 接続テスト
ssh -T -p 443 git@ssh.github.com

10. HTTPSに切り替え

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# HTTPSでクローン
git clone https://github.com/user/repo.git

# リモートURLを変更
git remote set-url origin https://github.com/user/repo.git

# 認証情報を保存
git config --global credential.helper store
# または(macOS)
git config --global credential.helper osxkeychain

11. サーバー側の設定(自前のサーバー)

1
2
3
4
5
6
7
8
9
# サーバーのauthorized_keysに追加
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# または手動で
ssh user@server
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

12. デバッグ

1
2
3
4
5
6
7
8
# 詳細なSSHログ
ssh -vvv git@github.com

# 使用されているキーの確認
ssh-add -l

# SSHの設定を確認
ssh -G github.com

トラブルシューティングフロー

  1. ssh -vT git@github.com で詳細を確認
  2. ssh-add -l でエージェントにキーがあるか確認
  3. キーがなければ ssh-add ~/.ssh/id_ed25519
  4. GitHubに公開鍵が登録されているか確認
  5. パーミッションを確認

よくある間違い

  • 秘密鍵と公開鍵を間違えてGitHubに登録
  • ssh-agentを起動していない
  • 複数のSSHキーがあり、正しいキーが選択されていない
  • Windows で改行コードの問題

関連エラー

参考リンク

SSH の他のエラー

最終更新: 2025-12-13