以下の内容はhttps://orotiyamatano.hatenablog.com/entry/ssh-keygenより取得しました。


【備忘録】SSH接続のための公開鍵・秘密鍵作成法(ssh-keygen)

こんにちは、やまだたいし( https://twitter.com/OrotiYamatano )です。
GithubのアクセスやSSH接続をするため公開鍵、秘密鍵作る必要がありますが、
毎回どうやって作ろうと思うことが多いです。

そこで今回はこの際ちゃんと勉強しまとめておこうと思ったのでその備忘録、雑記です。

目次


そもそも公開鍵秘密鍵とは


暗号化の仕組み

公開鍵・秘密鍵非対称暗号化と呼ばれる暗号化技術の一種です。

  • 公開鍵(Public Key): 誰にでも公開できる鍵。相手がデータを暗号化したり、署名を検証するために使用する
  • 秘密鍵(Private Key): 自分だけが持つ秘密の鍵。受け取ったデータを復号したり、自分が送るデータに署名を行うために使用する

この2つの鍵は数学的に関連しており、片方で暗号化したデータはもう片方でのみ復号化できます。

SSH接続での役割

SSH接続では、この仕組みを使って安全な認証を行います。

  1. サーバー側: あなたの公開鍵を保存
  2. クライアント側: あなたの秘密鍵を使用
  3. 認証時: サーバーがチャレンジ(ランダムなデータ)を送信し、クライアントが秘密鍵で署名して応答し、サーバーが公開鍵でその署名を検証する

これにより、パスワードを使わずに安全な接続が可能になります。

今回はその代表的なSSHKeyの作り方として、ssh-keygenを利用し作成します。

動作環境


この記事では以下の環境が前提となります。

  • OS: Windows 11
  • シェル: PowerShellWindows Terminal推奨)
  • OpenSSH: Windows標準搭載版
  • 管理者権限: 基本的には不要(一部設定で必要)

ssh-keygenとは


ssh-keygenは、SSH(Secure Shell)で使用する公開鍵・秘密鍵ペアを生成するためのコマンドラインツールです。

主な機能

主な機能としては以下の通り。

  • 鍵ペアの生成: 公開鍵と秘密鍵のペアを作成
  • 鍵の変換: 異なる形式間での鍵の変換
  • 鍵の管理: パスフレーズの変更、鍵の指紋確認など
  • 認証用キーの作成: SSH接続用の認証キー生成

鍵のことなら、これですみそう。

歴史と進化

ssh-keygenは1995年頃から存在する長い歴史を持つコマンドでレガシーに思えるかも知れません。
しかし、現在も活発に開発・更新が続いています。

2025年10月にもFIDOトークンサポート、WebAuthn対応など最新機能を追加
などなど更新が続いています。

また7年前の2018年には、
デフォルトの鍵フォーマットがPEM形式からOpenSSH形式に変更されるという非常に大きな変更がありました。
このように、古いコマンドでありながら現在も最新のセキュリティ要件に対応し続けている重要なツールです。

SSH keyについて


鍵の種類と特徴

ssh-keygenで作成できる主な鍵の種類は以下の通り

種類 ビット数 特徴 推奨用途
RSA 2048以上(推奨4096) 広くサポートされている、長い歴史 レガシーシステム
Ed25519 固定256ビット 高速でセキュア、短いキー 新規作成時推奨
ECDSA 256/384/521ビット 軽量、楕円曲線暗号 組み込みシステム

どの鍵を選ぶべきか

Ed25519 を推奨

  • セキュリティが高く、処理速度も速い
    • Ed25519の優先使用: より安全で高速、2014年頃から本格採用
  • 鍵のサイズが小さく、管理しやすい
    • RSA鍵の最小ビット数: 2048ビット(推奨4096ビット)、以前は1024ビットが標準だった
  • 現在の最新システムで広くサポートされている
    • ECDSA鍵の注意: 一部のシステムでセキュリティ問題が報告されている

RSA を使う場合

  • 古いシステムや特定のサービスで Ed25519 がサポートされていない場合
  • 最低でも 2048ビット(推奨は 4096ビット)を使用する

事前準備(OpenSSHの確認)


ssh-keygenを使用する前に、
Windowsであれば標準で入っているはずですが
OpenSSHが正しくインストールされているか確認しましょう。

# OpenSSHクライアントのバージョン確認
ssh -V

# OpenSSHのインストール状況確認
Get-WindowsCapability -Online | Where-Object Name -like "OpenSSH*"

# ちなみにSSH関連サービス一覧を確認するにはこのコマンドを叩くと良いです
Get-Service *ssh*

ssh-keygenの使い方


基本的な使い方

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

オプションの説明

  • -t ed25519: 鍵の種類を指定(RSA、Ed25519、ECDSAなど)
  • -b 4096: 鍵のビット数を指定(RSAの場合、最低2048ビット推奨)
  • -C "email": コメント(通常はメールアドレス)を追加
  • -m PEM: 出力形式を指定(PEM形式で古いシステムと互換性を保つ)
  • -f filename: 出力ファイル名を指定

推奨コマンド

# Ed25519(推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"

# RSA(レガシーシステム対応の場合)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Windows PowerShellでの実際の手順

1.PowerShellを開く

  • Win + XWindows PowerShell (多分日本語環境ならカタカナでターミナルとあるはず)

2.鍵生成

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

3.保存場所の指定

Enter a file in which to save the key (C:\Users\YourUsername/.ssh/id_ed25519): [Enter]

Windowsでは C:\Users\YourUsername\.ssh\ に保存されます。

4.パスフレーズの設定

Enter passphrase (empty for no passphrase): [パスフレーズを入力]
Enter same passphrase again: [同じパスフレーズを再入力]

5.生成されたファイルの確認

# .sshディレクトリの内容を確認
ls C:\Users\$env:USERNAME\.ssh\

SSH Agentの活用

ssh-agentとは

ssh-agent秘密鍵パスフレーズを安全にキャッシュして、毎回の入力手間を省くツールです。

Windows PowerShellでの基本的な使い方

# SSH Agentを起動
Start-Service ssh-agent

# 秘密鍵をSSH Agentに追加
ssh-add C:\Users\$env:USERNAME\.ssh\id_ed25519

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

補足

Windowsでは、SSH Agentサービスを自動起動に設定できます(補足:Set-Service ssh-agent -StartupType Automatic)。
既存のサーバーに新しいSSH鍵を追加する場合、ssh-copy-idコマンドを使用します(補足:ssh-copy-id -i C:\Users\$env:USERNAME\.ssh\id_ed25519.pub username@server-ip)。

GitHubでの設定方法


1. 公開鍵の確認

# 公開鍵の内容を表示
Get-Content C:\Users\$env:USERNAME\.ssh\id_ed25519.pub

# クリップボードにコピー(Windows)
Get-Content C:\Users\$env:USERNAME\.ssh\id_ed25519.pub | Set-Clipboard

2. GitHubに公開鍵を登録

  1. GitHubにログイン
  2. 右上のプロフィールアイコン → Settings
  3. 左サイドバーの SSH and GPG keys
  4. New SSH key をクリック
  5. Title: わかりやすい名前(例:「Windows PC」)
  6. Key: 先ほどコピーした公開鍵を貼り付け
  7. Add SSH key をクリック

3. 接続テスト

必要であれば接続テストを行います。

ssh -T git@github.com

成功すると以下のメッセージが表示されます:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

PEM/OpenSSH互換性についてのTips


フォーマットの違いと互換性

OpenSSH形式 vs PEM形式

OpenSSH形式(現在のデフォルト) - 2018年8月以降のデフォルト - よりセキュアで効率的 - 新しいOpenSSHクライアントで推奨

PEM形式(レガシー) - 従来の標準形式 - 古いシステムとの互換性が高い - -m PEMオプションで指定可能

互換性チェック

# 鍵の形式を確認
ssh-keygen -l -f C:\Users\$env:USERNAME\.ssh\id_ed25519

# PEM形式で生成(古いシステム対応)
ssh-keygen -t rsa -b 4096 -m PEM -C "your_email@example.com"

Windows固有の設定とTips

Windows Defenderとの連携

Windows DefenderがSSH鍵を安全なファイルとして認識するよう設定:

# .sshディレクトリを除外リストに追加(必要に応じて)
Add-MpPreference -ExclusionPath "C:\Users\$env:USERNAME\.ssh"

気をつけたいセキュリティ


鍵の管理

  1. パスフレーズを必ず設定する
  2. 定期的に鍵を更新する(推奨:1-2年)
  3. 不要になった鍵は削除する
  4. 秘密鍵は絶対に他人と共有しない
  5. 鍵の適切な権限設定: Windowsではicaclsコマンドでディレクトリ権限を設定

鍵の保管場所

Windows固有の注意点

# .sshディレクトリの権限設定(必要に応じて)
icacls "C:\Users\$env:USERNAME\.ssh" /inheritance:r /grant:r "$env:USERNAME:(OI)(CI)F"

まとめ


Windows環境でもOpenSSHが標準搭載されているため、Linux/macOSと同じようにSSH鍵を使用できます。
SSH鍵を使うことで、パスワードよりも安全で便利な認証が可能になります。特にGitHubでの開発では必須の技術なので、この機会にしっかりと身につけておきたいですね。


参考リンク




以上の内容はhttps://orotiyamatano.hatenablog.com/entry/ssh-keygenより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14