SSH鍵とは?
SSH鍵は、SSH(Secure Shell)接続で使われる認証方式です。パスワードの代わりに「秘密鍵」と「公開鍵」のペアを使います。
仕組み
あなたのPC サーバー/GitHub
┌──────────┐ ┌──────────┐
│ 秘密鍵 │ ← 絶対に外に出さない │ 公開鍵 │
│ (id_ed25519) │ │ (authorized_keys) │
└──────────┘ └──────────┘
│ │
└── 署名を送る ─────────────→ 検証 → OK!
- 公開鍵: サーバーやGitHubに登録する。誰に見られても問題ない
- 秘密鍵: 自分のPCに保管する。絶対に他人に渡さない
鍵のアルゴリズム
| アルゴリズム | 推奨度 | 説明 |
|---|---|---|
| Ed25519 | ◎ 最推奨 | 高速・安全・鍵が短い |
| ECDSA | ○ | Ed25519と同程度のセキュリティ |
| RSA (4096bit) | △ | 互換性は高いが鍵が長い |
| DSA | × | 非推奨(廃止済み) |
SSH鍵の生成
Ed25519鍵を生成する(推奨)
ssh-keygen -t ed25519 -C "[email protected]"
対話形式で質問されます:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
# → Enterでデフォルトのまま
Enter passphrase (empty for no passphrase):
# → パスフレーズを入力(推奨)
Enter same passphrase again:
# → 同じパスフレーズを再入力
生成されるファイル
~/.ssh/
├── id_ed25519 ← 秘密鍵(絶対に外に出さない)
└── id_ed25519.pub ← 公開鍵(サーバーやGitHubに登録する)
複数の鍵を使い分ける
# 仕事用
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_work
# 個人用
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_personal
パスフレーズとssh-agent
パスフレーズを設定すべき理由
秘密鍵にパスフレーズを設定すると、仮にファイルが流出しても鍵を使えません。
ssh-agentで毎回の入力を省く
# ssh-agent を起動
eval "$(ssh-agent -s)"
# 鍵を登録(パスフレーズを1回だけ入力)
ssh-add ~/.ssh/id_ed25519
# macOS: Keychainに保存
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
macOS の Keychain 連携
# ~/.ssh/config
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
GitHub にSSH鍵を登録する
1. 公開鍵をコピー
# macOS
pbcopy < ~/.ssh/id_ed25519.pub
# Linux
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard
# Windows (Git Bash)
clip < ~/.ssh/id_ed25519.pub
# どのOSでも
cat ~/.ssh/id_ed25519.pub
# → 表示されたテキストを手動でコピー
2. GitHubに登録
- GitHub → Settings → SSH and GPG keys → New SSH key
- Title: わかりやすい名前(例: “MacBook Pro 2026”)
- Key type: Authentication Key
- Key: コピーした公開鍵を貼り付け
- Add SSH key をクリック
3. 接続テスト
ssh -T [email protected]
# Hi username! You've successfully authenticated, but GitHub does not provide shell access.
4. リポジトリのURLをSSHに変更
# 現在のリモートURLを確認
git remote -v
# origin https://github.com/user/repo.git (fetch)
# SSHに変更
git remote set-url origin [email protected]:user/repo.git
# 確認
git remote -v
# origin [email protected]:user/repo.git (fetch)
SSH Config の設定
~/.ssh/config の基本
# GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
# 仕事用GitHub(別アカウント)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
# 開発サーバー
Host dev-server
HostName 192.168.1.100
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
# 本番サーバー(踏み台経由)
Host prod-server
HostName 10.0.0.50
User deploy
ProxyJump bastion
Host bastion
HostName bastion.example.com
User admin
IdentityFile ~/.ssh/id_ed25519
便利な設定
Host *
# 接続維持(60秒ごとにキープアライブ)
ServerAliveInterval 60
ServerAliveCountMax 3
# 接続の多重化(2回目以降の接続が高速に)
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
# ssh-agent に鍵を自動追加
AddKeysToAgent yes
# ソケットディレクトリを作成
mkdir -p ~/.ssh/sockets
複数のGitHubアカウントを使い分ける
# 個人用
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# 仕事用
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
# 個人用リポジトリ
git clone [email protected]:personal/repo.git
# 仕事用リポジトリ
git clone git@github-work:company/repo.git
サーバーへのSSH接続
公開鍵をサーバーに登録
# ssh-copy-id を使う(推奨)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
# 手動で登録する場合
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
パーミッションの確認
# サーバー上で実行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519 # 秘密鍵
chmod 644 ~/.ssh/id_ed25519.pub # 公開鍵
パーミッションが正しくないとSSH接続が拒否されます。
パスワード認証を無効にする(セキュリティ強化)
サーバーの /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
# 設定を反映
sudo systemctl restart sshd
トラブルシューティング
接続できない場合のデバッグ
# 詳細なログを表示
ssh -vvv user@server
# よくある確認ポイント:
# 1. 鍵のパーミッション
# 2. 正しい鍵が使われているか
# 3. サーバーの authorized_keys の内容
# 4. ファイアウォールの設定
Permission denied (publickey)
# 1. 鍵が ssh-agent に登録されているか確認
ssh-add -l
# 2. 正しい鍵を指定して接続
ssh -i ~/.ssh/id_ed25519 user@server
# 3. パーミッションを確認
ls -la ~/.ssh/
# id_ed25519 は 600 であること
GitHub に接続できない
# テスト接続
ssh -T [email protected]
# 別のポートで試す(企業ファイアウォール対策)
ssh -T -p 443 [email protected]
443ポートで接続できる場合、~/.ssh/config に以下を追加:
Host github.com
HostName ssh.github.com
Port 443
User git
鍵のパスフレーズを変更する
ssh-keygen -p -f ~/.ssh/id_ed25519
鍵のフィンガープリントを確認
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 256 SHA256:XXXXXXXXXX [email protected] (ED25519)
セキュリティのベストプラクティス
| 対策 | 説明 |
|---|---|
| Ed25519を使う | RSAより安全で高速 |
| パスフレーズを設定 | 鍵の流出時の保険 |
| 鍵を使い分ける | サービスごとに別の鍵 |
| 定期的に更新 | 古い鍵は無効にする |
| 秘密鍵をバックアップしない | クラウドストレージに置かない |
| パスワード認証を無効化 | サーバーは鍵認証のみにする |
まとめ
SSH鍵の設定手順をまとめると:
ssh-keygen -t ed25519で鍵を生成- パスフレーズを設定
- ssh-agentに登録
- 公開鍵をGitHub/サーバーに登録
~/.ssh/configで接続設定を管理- パーミッションを正しく設定
一度設定してしまえば、安全かつ快適なSSH接続が実現できます。
SSH鍵のフィンガープリントなど、ハッシュ値の確認にはAssistyのハッシュ生成ツールが便利です。SHA-256等のハッシュをブラウザ上で計算できます。