ssh-keygen(SSH 鍵ペアの生成)
『ssh-keygen』は『Linux / macOS』環境で SSH 認証に使う鍵ペアを生成するコマンドです。公開鍵(id_ed25519.pub など)をサーバーに登録し、秘密鍵(id_ed25519)をローカルに保管することで、パスワードなしの安全な接続が実現します。ED25519 アルゴリズムは鍵が短く高速で安全性が高いため、新規作成時は ED25519 が推奨されます。RSA はレガシーシステムとの互換性が必要な場合に使用します。生成した鍵は ~/.ssh/ ディレクトリに保存され、authorized_keys ファイルで公開鍵を管理します。
構文
# -----------------------------------------------
# ED25519 鍵ペアの生成(推奨)
# -----------------------------------------------
# ssh-keygen -t ed25519 -C "{コメント}"
# -t ed25519 → アルゴリズムとして ED25519 を指定します
# -C → 鍵を識別するためのコメントを付けます(メールアドレスや用途が一般的です)
# → 対話形式でファイルパスとパスフレーズの入力を求められます
# 例: ssh-keygen -t ed25519 -C "tsunemori@mwpsb.go.jp"
# -----------------------------------------------
# RSA 鍵ペアの生成(レガシー互換)
# -----------------------------------------------
# ssh-keygen -t rsa -b {ビット数} -C "{コメント}"
# -t rsa → アルゴリズムとして RSA を指定します
# -b → 鍵のビット数を指定します(最低 2048、推奨 4096)
# 例: ssh-keygen -t rsa -b 4096 -C "tsunemori@mwpsb.go.jp"
# -----------------------------------------------
# 出力先ファイルを指定して生成
# -----------------------------------------------
# ssh-keygen -t ed25519 -f {ファイルパス} -C "{コメント}"
# -f → 秘密鍵の出力先ファイルパスを指定します
# → 公開鍵は同じパスに .pub が付いて生成されます
# 例: ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server_a -C "server_a"
# -----------------------------------------------
# パスフレーズの変更
# -----------------------------------------------
# ssh-keygen -p -f {ファイルパス}
# -p → 既存の秘密鍵のパスフレーズを変更します
# 例: ssh-keygen -p -f ~/.ssh/id_ed25519
# -----------------------------------------------
# 公開鍵の内容を確認
# -----------------------------------------------
# ssh-keygen -y -f {秘密鍵のファイルパス}
# -y → 秘密鍵に対応する公開鍵の内容を標準出力に表示します
# 例: ssh-keygen -y -f ~/.ssh/id_ed25519
# -----------------------------------------------
# 鍵のフィンガープリントを確認
# -----------------------------------------------
# ssh-keygen -l -f {ファイルパス}
# -l → 鍵のフィンガープリント(ハッシュ値)を表示します
# → 公開鍵・秘密鍵どちらのパスでも指定できます
# -E sha256 → フィンガープリントのハッシュ形式を指定します(sha256 または md5)
# 例: ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 例: ssh-keygen -l -E sha256 -f ~/.ssh/id_ed25519.pub
構文一覧
| 操作 | コマンド | 説明 |
|---|---|---|
| ED25519 鍵ペアの生成 | ssh-keygen -t ed25519 -C "{コメント}" | 推奨アルゴリズムの ED25519 で鍵ペアを生成します。鍵長が短く処理が高速で、セキュリティ強度も高いです。 |
| RSA 鍵ペアの生成 | ssh-keygen -t rsa -b 4096 -C "{コメント}" | RSA アルゴリズムで鍵ペアを生成します。古いシステムとの互換性が必要な場合に使用してください。 |
| 出力先ファイルの指定 | ssh-keygen -t ed25519 -f {ファイルパス} | 秘密鍵の保存先を指定します。複数の鍵を用途別に管理する場合に便利です。 |
| パスフレーズの変更 | ssh-keygen -p -f {秘密鍵パス} | 既存の秘密鍵のパスフレーズを変更します。パスフレーズを新たに設定したり、削除したりする際にも使います。 |
| 公開鍵の内容を表示 | ssh-keygen -y -f {秘密鍵パス} | 秘密鍵から公開鍵の内容を再生成して表示します。公開鍵ファイルを紛失した場合に使用します。 |
| フィンガープリントの確認 | ssh-keygen -l -f {鍵ファイルパス} | 鍵のフィンガープリントを表示します。サーバーの鍵と一致するか確認する際に使用します。 |
| ハッシュ形式の指定 | ssh-keygen -l -E sha256 -f {鍵ファイルパス} | フィンガープリントのハッシュ形式を SHA-256 または MD5 で指定して表示します。 |
| 公開鍵をサーバーに登録 | ssh-copy-id -i {公開鍵パス} {ユーザー}@{ホスト} | 公開鍵をリモートサーバーの authorized_keys に追記します。ssh-keygen とセットで使われます。 |
使用例
ED25519 鍵ペアを生成してサーバーに登録する
# ----------------------------------------------- # 鍵ペアを生成して公開鍵をサーバーに登録します # ----------------------------------------------- # ~/.ssh/ ディレクトリが存在しない場合は作成します # パーミッションは 700(本人のみ読み書き・実行可)にします mkdir -p ~/.ssh chmod 700 ~/.ssh # ED25519 鍵ペアを生成します # -C オプションにメールアドレスや用途を入れておくと管理しやすくなります ssh-keygen -t ed25519 -C "tsunemori@mwpsb.go.jp"
実行するコマンドは次の通りです。
$ ssh-keygen -t ed25519 -C "tsunemori@mwpsb.go.jp" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/tsunemori/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): (パスフレーズを入力) Enter same passphrase again: (もう一度入力) Your identification has been saved in /home/tsunemori/.ssh/id_ed25519 Your public key has been saved in /home/tsunemori/.ssh/id_ed25519.pub The key fingerprint is: SHA256:abcXYZ1234567890abcXYZ1234567890abcXYZ12345 tsunemori@mwpsb.go.jp The key's randomart image is: +--[ED25519 256]--+ | .o+. | | . =+o | | . *oB . | +----[SHA256]-----+
実装例は次の通りです。
# 生成した鍵ファイルを確認します # id_ed25519(秘密鍵)と id_ed25519.pub(公開鍵)の2ファイルが生成されます ls -la ~/.ssh/ # 公開鍵をリモートサーバーに登録します # 以降はパスワード入力なしで SSH 接続できるようになります ssh-copy-id -i ~/.ssh/id_ed25519.pub tsunemori@192.168.1.10
実行するコマンドは次の通りです。
$ ls -la ~/.ssh/ total 24 drwx------ 2 tsunemori tsunemori 4096 Mar 25 10:00 . drwxr-xr-x 20 tsunemori tsunemori 4096 Mar 25 09:55 .. -rw------- 1 tsunemori tsunemori 419 Mar 25 10:00 id_ed25519 -rw-r--r-- 1 tsunemori tsunemori 107 Mar 25 10:00 id_ed25519.pub
用途別に複数の鍵を管理する
# ----------------------------------------------- # サーバー A 用と GitHub 用で鍵を分けて管理します # ----------------------------------------------- # 監視カメラサーバー接続用の鍵を生成します # -f で出力先を指定することで既存の鍵を上書きしません ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_sibyl -C "sibyl_system_server" # GitHub 用の鍵を生成します ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "ginoza@mwpsb.go.jp" # ~/.ssh/config に接続先と鍵の対応を記述します # これにより ssh コマンドで自動的に正しい鍵が選択されます
同じ処理を次のようにも書けます。
# ~/.ssh/config の設定例です
# Host に任意のエイリアスを付け、IdentityFile で使用する秘密鍵を指定します
# シビュラシステムサーバー接続設定
Host sibyl
HostName 192.168.1.20
User ginoza
IdentityFile ~/.ssh/id_ed25519_sibyl
# GitHub 接続設定
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
実行するコマンドは次の通りです。
$ ssh sibyl Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64) ginoza@sibyl-server:~$
フィンガープリントを確認して鍵を識別する
# ----------------------------------------------- # 鍵のフィンガープリントを確認します # ----------------------------------------------- # 公開鍵のフィンガープリントを SHA-256 形式で表示します # サーバー管理者から提示されたフィンガープリントと照合して鍵の正当性を確認します ssh-keygen -l -E sha256 -f ~/.ssh/id_ed25519.pub
実行するコマンドは次の通りです。
$ ssh-keygen -l -E sha256 -f ~/.ssh/id_ed25519.pub 256 SHA256:abcXYZ1234567890abcXYZ1234567890abcXYZ12345 tsunemori@mwpsb.go.jp (ED25519)
実装例は次の通りです。
# 公開鍵ファイルを紛失した場合は秘密鍵から再生成できます # 出力内容を .pub ファイルに書き込んで復元します ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub # 復元した公開鍵を確認します cat ~/.ssh/id_ed25519.pub
実行するコマンドは次の通りです。
$ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAbcXYZ1234567890abcXYZ1234567890abcXYZ tsunemori@mwpsb.go.jp
~/.ssh/ の推奨ディレクトリ構成
# ----------------------------------------------- # ~/.ssh/ の推奨パーミッション構成 # ----------------------------------------------- # ~/.ssh/ ディレクトリ本体は 700 にします(他ユーザーから見えない) chmod 700 ~/.ssh # 秘密鍵は 600 にします(本人のみ読み書き可) # パーミッションが緩いと SSH クライアントが鍵の使用を拒否します chmod 600 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519_sibyl # 公開鍵は 644 で問題ありません(内容は公開情報のため) chmod 644 ~/.ssh/id_ed25519.pub chmod 644 ~/.ssh/id_ed25519_sibyl.pub # config ファイルは 600 にします chmod 600 ~/.ssh/config # authorized_keys は 600 にします # 他ユーザーに書き込み権限があると SSH サーバーが拒否します chmod 600 ~/.ssh/authorized_keys # パーミッション設定後の確認 ls -la ~/.ssh/
実行するコマンドは次の通りです。
$ ls -la ~/.ssh/ total 32 drwx------ 2 tsunemori tsunemori 4096 Mar 25 10:30 . drwxr-xr-x 20 tsunemori tsunemori 4096 Mar 25 09:55 .. -rw------- 1 tsunemori tsunemori 600 Mar 25 10:30 authorized_keys -rw------- 1 tsunemori tsunemori 300 Mar 25 10:20 config -rw------- 1 tsunemori tsunemori 419 Mar 25 10:00 id_ed25519 -rw-r--r-- 1 tsunemori tsunemori 107 Mar 25 10:00 id_ed25519.pub -rw------- 1 tsunemori tsunemori 419 Mar 25 10:05 id_ed25519_sibyl -rw-r--r-- 1 tsunemori tsunemori 110 Mar 25 10:05 id_ed25519_sibyl.pub
概要
『ssh-keygen』は SSH 公開鍵認証に必要な鍵ペアを生成するコマンドです。公開鍵暗号方式を用いており、秘密鍵はローカルマシンに厳重に保管し、公開鍵のみをサーバーの ~/.ssh/authorized_keys に登録します。アルゴリズムは新規作成であれば ED25519 を選択するのが現在の推奨です。RSA 4096 bit は古いシステムとの互換性が必要な場合に使用してください。パスフレーズは秘密鍵を暗号化するためのものです。設定しておくことで秘密鍵ファイルが漏洩した際のリスクを大幅に低減できます。ssh-agent を使えばセッション中はパスフレーズの入力を省略できます。複数のサーバーや GitHub などを使い分ける場合は ~/.ssh/config に IdentityFile を設定し、接続先ごとに鍵を割り当てることが管理の基本です。SSH 接続の実行については ssh のページも参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。