はじめに
この章では、本資料の目的と構成をやさしく説明します。ssh-keygenはSSH接続で使う公開鍵・秘密鍵のペアを作るための標準的なコマンドです。本資料は、初めて鍵を扱う方から運用で鍵を管理する方までを想定し、基本から実践的な使い方までを順を追って解説します。
本資料の目的
- 鍵の生成方法と保存場所を理解する
- 鍵タイプや鍵長の選び方を学ぶ
- パスフレーズの扱い方と運用上の注意点を知る
- よく使うオプションを実例で覚える
対象読者
- SSHで鍵認証を使いたい初心者の方
- 鍵管理の基本を復習したい中級者の方
前提知識
- 基本的なコマンド実行(ターミナルの使用)ができると読みやすいです。難しい前提は必要ありません。
次章以降で、実際のコマンド例を交えて丁寧に説明していきます。
ssh-keygenとは何か?
概要
ssh-keygenは、SSH接続で使う公開鍵と秘密鍵のペアを作成・管理するコマンドです。鍵認証を使うと、ログイン時に毎回パスワードを入力せずに安全に接続できます。GitHubやGitLab、サーバー管理で広く使われます。
仕組みをやさしく説明
鍵は「公開鍵」と「秘密鍵」の2つで構成します。公開鍵はサーバー側に置き、秘密鍵は自分の端末に安全に保管します。例えると、公開鍵がサーバーの錠(ロック)で、秘密鍵が自分だけの鍵です。接続時にサーバーは公開鍵を使ってあなたの秘密鍵を確認し、本人であることを確かめます。
主な利点
- パスワードより安全:推測や総当たり攻撃に強いです。
- 利便性が高い:一度設定すればパスワード入力が不要です。
実際の流れ(簡単)
- ssh-keygenで鍵を生成する
- 公開鍵を接続先(サーバーやGitサービス)に登録する
- SSHで接続すると鍵で認証される
次章では、生成されるファイルと保存場所を詳しく説明します。
ssh-keygenで生成されるファイルと保存場所
概要
ssh-keygenを実行すると通常、秘密鍵と公開鍵の2つのファイルが生成されます。秘密鍵は手元のマシンだけに置き、公開鍵を接続先に渡して認証に使います。
生成されるファイル
- 秘密鍵(例: id_rsa, id_ed25519)
- 自分だけが読み書きできる場所に保存します。第三者に渡してはいけません。
- ファイル権限は一般に600(所有者のみ読み書き)にします。
- 公開鍵(例: id_rsa.pub, id_ed25519.pub)
- 接続先のサーバーやGitHubなどに登録して使います。内容はテキストなので安全に共有できます。
デフォルトの保存場所
- Linux / macOS: ~/.ssh/id_rsa や ~/.ssh/id_ed25519
- 実際のパス例: /home/username/.ssh/id_rsa または /Users/username/.ssh/id_ed25519
- Windows(OpenSSH利用時): C:\Users\<ユーザー名>.ssh\id_rsa
カスタム保存先と上書きの注意
鍵ファイルは特に指定がなければ~/.sshに置かれますが、ssh-keygenの-fオプションで別のパスを指定できます(例: ssh-keygen -f ~/.ssh/my_key)。既に同名の鍵があると上書きされるため、バックアップか別名の指定をおすすめします。
公開鍵の設置場所例
- サーバー: ~/.ssh/authorized_keys に追記
- GitHub/GitLab: ウェブインターフェースで公開鍵を登録
注意点
秘密鍵は必ず安全に保管し、不要になった鍵は削除または失効させてください。公開鍵は複数のサービスで使い回せますが、鍵の管理には注意を払ってください。
最も基本的なssh-keygenの使い方
概要
最もシンプルな方法は、オプションを付けずにssh-keygenコマンドを実行することです。対話形式で保存先とパスフレーズを聞かれ、公開鍵と秘密鍵が生成されます。
手順(実例)
- ターミナルで次のコマンドを実行します。
ssh-keygen
- 「Enter file in which to save the key (/home/ユーザー/.ssh/id_rsa):」と聞かれます。何も入力せずEnterするとデフォルトの~/.ssh/id_rsaに保存されます。
- パスフレーズの入力を求められます。空でよければEnterを2回押します。パスフレーズを設定すると秘密鍵の保護になります。
生成されるファイルと確認方法
デフォルトでは以下が作られます。
– 秘密鍵: ~/.ssh/id_rsa
– 公開鍵: ~/.ssh/id_rsa.pub
確認は次のように行います。
ls -l ~/.ssh/
cat ~/.ssh/id_rsa.pub
公開鍵の中身をコピーしてサーバーの~/.ssh/authorized_keysに追加すれば、鍵認証で接続できます。
注意点
秘密鍵は厳重に管理してください。ファイル権限は600、公開鍵は644にするのが一般的です。パスフレーズを付けると安全性が上がりますが、接続時に毎回入力が必要になります。
鍵タイプ・鍵長を指定して生成する
概要
ssh-keygenでは -t オプションで鍵の方式(アルゴリズム)を指定します。代表的な方式は rsa、ed25519、ecdsa です。用途や互換性に応じて方式と鍵長を選びます。
主要な方式と使い分け
- RSA
- 古くから広く使われる方式です。互換性が高いので古いサーバーやツールと接続するときに便利です。
- 強度を上げるには鍵長(ビット数)を増やします。よく使われるのは 2048 または 4096 ビットで、安全性を重視するなら 4096 ビットを推奨します。
-
例: ssh-keygen -t rsa -b 4096 -C “me@example.com”
-
ED25519
- 新しい方式で、鍵が短くても高い安全性と高速な処理が得られます。新規の鍵作成にはこちらをお勧めします。
- 鍵長指定は不要で、コマンドは簡潔です。
-
例: ssh-keygen -t ed25519 -C “me@example.com”
-
ECDSA
- 楕円曲線方式の一種で、鍵長に 256/384/521 ビットを使います。軽量で高速ですが、環境によっては互換性に注意が必要です。
選び方の目安
- 新規作成なら ed25519 を優先してください。扱いやすく安全です。
- 古いシステムと接続する必要があるなら rsa(4096 ビット)を選んでください。
- 特別な理由がなければ ecdsa を選ぶ必要はほとんどありません。
必要に応じて -f で出力ファイル名を指定したり、-C でコメントを付けて管理しやすくしてください。
パスフレーズ付き・無しでの生成
概要
パスフレーズとは、秘密鍵ファイルをさらに暗号化するための文字列です。秘密鍵が盗まれてもパスフレーズがあれば勝手に使われにくくなります。パスフレーズを設定しないと鍵は入力なしで使えますが、盗難時のリスクが高まります。
インタラクティブな流れ
普通に ssh-keygen を実行すると対話形式で進みます。例:
$ ssh-keygen -t ed25519
Enter file in which to save the key (/home/user/.ssh/id_ed25519): ← 保存先入力
Enter passphrase (empty for no passphrase): ← パスフレーズ入力(空欄可)
Enter same passphrase again: ← 確認入力
コマンドラインで指定する例
あらかじめ指定するには -f と -N を使います。
– パスフレーズあり:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "your passphrase"
- パスフレーズ無し:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
パスフレーズの変更
既存の秘密鍵のパスフレーズは次で変更します:
ssh-keygen -p -f ~/.ssh/id_ed25519
使い分けの目安
日常的に個人の端末で使うならパスフレーズを設定し、ssh-agent を使って入力回数を減らすと安全で便利です。サーバー上で無人処理に使う鍵はパスフレーズ無しにする場合がありますが、鍵の管理を厳重にしてください。
ssh-keygenの主なオプション一覧と使い方
ここでは代表的なオプションを分かりやすく説明します。各例は実行しやすいように簡潔に示します。
- -t
- 説明: 鍵の種類を指定します。ed25519は短く高速で推奨、rsaは互換性が高いです。
-
例: ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C “you@example.com”
-
-b
- 説明: 鍵長を指定します。主にRSAで使い、2048以上、より安全にしたいときは4096を選びます。
-
例: ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
-
-f
- 説明: 秘密鍵の保存先とファイル名を指定します。既存ファイルに上書きする点に注意してください。
-
例: ssh-keygen -f ~/.ssh/my_custom_key
-
-C
- 説明: 鍵にコメントを付けます。メールアドレスや用途を書いて識別しやすくします。
-
例: ssh-keygen -t ed25519 -C “work@example.com”
-
-N
- 説明: 新しく鍵を作る際のパスフレーズを指定します。空文字列(””)を指定するとパスフレーズ無しになります。
-
例: ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N “” # パスフレーズ無し
-
-y
- 説明: 秘密鍵から対応する公開鍵を出力します。公開鍵が失われたときに便利です。
-
例: ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
-
使い方の一例
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C “you@example.com” -N “”
作成後は秘密鍵(.pubでない方)を厳重に管理してください。












