こんにちは、やまだたいし( https://twitter.com/OrotiYamatano )です。
GithubのアクセスやSSH接続をするため公開鍵、秘密鍵作る必要がありますが、
毎回どうやって作ろうと思うことが多いです。
そこで今回はこの際ちゃんと勉強しまとめておこうと思ったのでその備忘録、雑記です。
目次
そもそも公開鍵秘密鍵とは
暗号化の仕組み
公開鍵・秘密鍵は非対称暗号化と呼ばれる暗号化技術の一種です。
- 公開鍵(Public Key): 誰にでも公開できる鍵。相手がデータを暗号化したり、署名を検証するために使用する
- 秘密鍵(Private Key): 自分だけが持つ秘密の鍵。受け取ったデータを復号したり、自分が送るデータに署名を行うために使用する
この2つの鍵は数学的に関連しており、片方で暗号化したデータはもう片方でのみ復号化できます。
SSH接続での役割
SSH接続では、この仕組みを使って安全な認証を行います。
- サーバー側: あなたの公開鍵を保存
- クライアント側: あなたの秘密鍵を使用
- 認証時: サーバーがチャレンジ(ランダムなデータ)を送信し、クライアントが秘密鍵で署名して応答し、サーバーが公開鍵でその署名を検証する
これにより、パスワードを使わずに安全な接続が可能になります。
今回はその代表的なSSHKeyの作り方として、ssh-keygenを利用し作成します。
動作環境
この記事では以下の環境が前提となります。
- OS: Windows 11
- シェル: PowerShell(Windows Terminal推奨)
- OpenSSH: Windows標準搭載版
- 管理者権限: 基本的には不要(一部設定で必要)
ssh-keygenとは
ssh-keygenは、SSH(Secure Shell)で使用する公開鍵・秘密鍵ペアを生成するためのコマンドラインツールです。
主な機能
主な機能としては以下の通り。
鍵のことなら、これですみそう。
歴史と進化
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 + X→Windows 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に公開鍵を登録
- GitHubにログイン
- 右上のプロフィールアイコン → Settings
- 左サイドバーの SSH and GPG keys
- New SSH key をクリック
- Title: わかりやすい名前(例:「Windows PC」)
- Key: 先ほどコピーした公開鍵を貼り付け
- 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年)
- 不要になった鍵は削除する
- 秘密鍵は絶対に他人と共有しない
- 鍵の適切な権限設定: 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での開発では必須の技術なので、この機会にしっかりと身につけておきたいですね。