logo Fonnpo

お問い合わせ
2026年5月30日 3 分で読める Fonnpo

SSH Key 生成完全ガイド

SSH キーは非対称暗号を使ってパスワードなしのログインと認証を実現します。アルゴリズム選択・基本生成・複数プラットフォームと複数アカウントの管理・ssh-agent の設定・サーバー配置・Windows 環境・よくあるトラブルシュートまで、あらゆる状況をまとめた一本です。

#DevOps#SSH#Git

SSH キーは非対称暗号を使ってパスワードなしのログインと認証を実現します。パスワードより安全で便利です。この記事では日常開発でよくある状況をひととおり解説します。

アルゴリズムの選択

キーを生成する前に、まずアルゴリズムを決めましょう。

アルゴリズム推奨度説明
Ed25519✅ 第一候補現代的な楕円曲線アルゴリズム。鍵が短く、速く、安全性が高い
RSA 4096✅ 互換用互換性が最も高い。レガシーシステムに必須。鍵が長い
ECDSA⚠️ 可RSA より短いが、一部の実装に問題あり
RSA 2048❌ 非推奨現在は強度不足とされている
DSA❌ 非推奨廃止済み

結論:新しい環境では Ed25519 を優先し、レガシーシステムとの互換が必要な場合のみ RSA 4096 を使いましょう。

基本:最初の SSH キーを生成する

Ed25519(推奨)

Bash
        ssh-keygen -t ed25519 -C "your_email@example.com"

    

RSA 4096(互換用)

Bash
        ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    

実行すると次のプロンプトが表示されます:

Properties
        Enter file in which to save the key (/Users/you/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

    
  • ファイルパス:Enter でデフォルトパスを使用
  • パスフレーズ:設定推奨。秘密鍵に追加のパスワード保護をかけます

生成後:

  • ~/.ssh/id_ed25519 — 秘密鍵。絶対に公開・アップロードしないこと
  • ~/.ssh/id_ed25519.pub — 公開鍵。各プラットフォームに貼り付けて使う

公開鍵の内容を確認する

Bash
        cat ~/.ssh/id_ed25519.pub

    

出力例:

Properties
        ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... your_email@example.com

    

この一行をコピーして GitHub / GitLab / サーバーの authorized_keys に貼り付けます。

ケース1:複数プラットフォーム・複数アカウント(最も一般的)

個人の GitHub アカウント、会社の GitHub アカウント、GitLab、社内サーバーを同時に使うことはよくあります。それぞれ独立した鍵が必要です。

ステップ1:複数の鍵を生成し、それぞれ名前を付ける

Bash
        # 個人 GitHub
ssh-keygen -t ed25519 -C "me@personal.com" -f ~/.ssh/id_ed25519_github_personal

# 会社 GitHub
ssh-keygen -t ed25519 -C "me@work.com" -f ~/.ssh/id_ed25519_github_work

# GitLab
ssh-keygen -t ed25519 -C "me@work.com" -f ~/.ssh/id_ed25519_gitlab

# 社内サーバー
ssh-keygen -t ed25519 -C "server" -f ~/.ssh/id_ed25519_server

    

ステップ2:~/.ssh/config を設定する

~/.ssh/config
        # 個人 GitHub
Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_personal

# 会社 GitHub
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_work

# GitLab
Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitlab

# 社内サーバー
Host dev-server
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519_server

    

ステップ3:エイリアスを使って操作する

Bash
        # 個人リポジトリをクローン(github.com を Host エイリアスに置き換える)
git clone git@github-personal:username/repo.git

# 会社リポジトリをクローン
git clone git@github-work:company/repo.git

# サーバーに直接 SSH ログイン
ssh dev-server

    

ケース2:ssh-agent に登録する

秘密鍵にパスフレーズを設定している場合、毎回入力が必要になります。ssh-agent はセッション中パスフレーズを記憶してくれます。

Bash
        # agent を起動(通常は自動起動済み)
eval "$(ssh-agent -s)"

# 秘密鍵を agent に追加
ssh-add ~/.ssh/id_ed25519

# 登録済みの鍵を確認
ssh-add -l

    

macOS での永続化(Keychain に保存して再起動後も再登録不要):

Bash
        ssh-add --apple-use-keychain ~/.ssh/id_ed25519

    

~/.ssh/config に以下を追加して macOS が自動的に Keychain を使うようにします:

Properties
        Host *
    AddKeysToAgent yes
    UseKeychain yes

    

ケース3:公開鍵をサーバーに配置する

方法1:ssh-copy-id(最も簡単)

Bash
        ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

    

方法2:パイプで転送

Bash
        cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

    

方法3:サーバー上で直接編集

サーバーにログイン後:

Bash
        mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容を貼り付け" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

    

パーミッションが間違っていると SSH が拒否します:

パスパーミッション
~/.ssh/700
~/.ssh/authorized_keys600
秘密鍵ファイル600
公開鍵ファイル644

ケース4:Windows 環境

Windows にはいくつかの異なる設定が必要です。

Git Bash / WSL

macOS/Linux とほぼ同じ手順です。~/.ssh/ パスも同様に使えます。

PowerShell(内蔵 OpenSSH)

Windows 10 1809 以降は OpenSSH が標準搭載されています:

Bash
        # 鍵を生成
ssh-keygen -t ed25519 -C "your_email@example.com"

# 鍵の保存先:
# C:\Users\ユーザー名\.ssh\id_ed25519

    

ssh-agent サービスを有効化

Bash
        # 管理者として実行
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

# 鍵を追加
ssh-add $env:USERPROFILE\.ssh\id_ed25519

    

ケース5:接続テスト

設定後、正常に動作するか確認します:

Bash
        # GitHub をテスト
ssh -T git@github.com
# 出力: Hi username! You've successfully authenticated...

# エイリアスでテスト
ssh -T git@github-personal

# サーバーをテスト(-v で詳細ログを表示、トラブルシュート用)
ssh -v user@server_ip

    

ケース6:鍵の更新・失効

新しい鍵を生成した後、必要な作業:

  1. 新しい公開鍵をすべてのプラットフォーム / サーバーに追加
  2. 古い公開鍵を各プラットフォーム / サーバーから削除
  3. ローカルの古い秘密鍵ファイルを削除(任意)
Bash
        # agent から古い鍵を削除
ssh-add -d ~/.ssh/old_key

# 古い鍵ファイルを削除
rm ~/.ssh/old_key ~/.ssh/old_key.pub

    

サーバー上で古い公開鍵を削除:

Bash
        # authorized_keys を編集して該当行を削除
nano ~/.ssh/authorized_keys

    

よくある問題

Permission denied (publickey)

  • 公開鍵が対象プラットフォームに追加されているか確認
  • ~/.ssh/authorized_keys のパーミッションが 600 か確認
  • ssh -v でハンドシェイクの詳細を確認

毎回パスフレーズを求められる

  • ssh-agent に登録する:ssh-add ~/.ssh/id_ed25519
  • macOS では --apple-use-keychain で永続化

git がどの鍵を使っているか確認したい

Bash
        # 現在のアイデンティティを確認
ssh -T git@github.com

# 特定の鍵を指定してテスト
ssh -i ~/.ssh/id_ed25519_github_personal -T git@github.com

    
Fonnpo