本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、SSHの公開鍵と秘密鍵を作成する「ssh-keygen」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、SSHの公開鍵と秘密鍵を作成する「ssh-keygen」コマンドです。
「ssh-keygen」はSSH(Secure SHell)の公開鍵と秘密鍵を作成するコマンドです。
SSHは、暗号や認証を使って通信を行うためのプロトコルです。ssh-keygenコマンドは「OpenSSH」で使う公開鍵と秘密鍵や、CA鍵(Certificate Authority、認証局による鍵)を使った「証明書」と呼ばれるファイルを作成できます。今回は、公開鍵と秘密鍵を作成する方法を扱います。
ssh-keygen [オプション]
※[ ]は省略可能な引数を示しています。
短いオプション | 意味 |
---|---|
-t 方式 | 作成する鍵の暗号化形式を「rsa」(デフォルト)、「dsa」「ecdsa」「ed25519」から指定する |
-b ビット数 | 作成する鍵のビット数を指定する(RSA形式の場合、デフォルトは2048bit) |
-a ラウンド数 | ed25519形式で生成する際のKDF(Key Derivation Function)ラウンド数を指定する。数が大きいと暗号の耐性が上がるが、処理に時間がかかるようになる |
-f ファイル | ファイルを指定する(生成または読み出すファイルを指定)。ただし、併用するオプションによって意味が変化する(通常は鍵ファイル) |
-p | パスフレーズを変更する(対話形式で元のパスフレーズを1回、新しいパスフレーズを2回指定する)。元のパスフレーズは「-P」オプション、新しいパスフレーズは「-N」オプションで指定可能 |
-N パスフレーズ | 新しく設定するパスフレーズを指定する |
-P パスフレーズ | 元のパスフレーズを指定する |
-C コメント | コメントを指定する(デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除) |
-E 形式 | 鍵の指紋(fingerprint)を表示する際の形式を「sha256」(デフォルト)か「md5」で指定する |
短いオプション | 意味 |
---|---|
-F ホスト名 | 指定したホスト名を、鍵ファイルとともに保存されている「known_hosts」ファイルから探して表示する(-fオプションでknown_hostsファイルを指定可能、-lオプションで対応する指紋を表示可能) |
-H | 「known_hosts」ファイルを更新する(-fオプションでknown_hostsファイルを指定可能、元のファイルは拡張子.oldで保存される) |
-R ホスト名 | 指定したホストに属する鍵を全て取り除く(-fオプションでknown_hostsファイルを指定可能) |
-r ホスト名 | 指定したホストに対応する指紋を表示する(-fオプションでknown_hostsファイルを指定可能) |
短いオプション | 意味 |
---|---|
-i | 暗号化されていない秘密鍵ファイルまたは公開鍵ファイルを読み出し、OpenSSH互換形式に変換してから標準出力に出力する(変換元のファイルは-fオプションまたは対話式で指定、-mオプションで変換元の鍵の形式を指定できる) |
-e | OpenSSH形式の秘密鍵ファイルまたは公開鍵ファイルを読み出し、RFC 4716形式または-mオプションで指定した形式で標準出力に出力する(変換元のファイルは-fオプションまたは対話式で指定) |
-m 形式 | 「-i」オプションで入力する鍵の形式を、「-e」オプションで出力する鍵の形式を、「RFC4716」(デフォルト)、「PKCS8」「PEM」から指定する |
-y | OpenSSH形式の秘密鍵ファイルを読み出し、OpenSSH形式の公開鍵を標準出力に出力する |
短いオプション | 意味 |
---|---|
-s CA鍵 | 指定したCA鍵で公開鍵に署名をする |
-I 秘密鍵 | 公開鍵に証明する際に使用する鍵を指定する |
-h | 鍵に署名する際、ユーザー証明書の代わりにホスト証明書を作成する |
-D ライブラリ | PKCS#11トークンのライブラリを指定し、公開鍵をダウンロードする(※1) |
-n 名前 | 証明書に含めるユーザー名またはホスト名を指定する。名前は複数指定可能 |
-O オプション | 鍵に署名する際に使用する証明書のオプションを指定する(詳細は「man ssh-keygen」の「CERTIFICATES」セクション参照) |
-V 期間 | 証明書に署名する際の有効期間を指定する。「YYYYMMDD」または「YYYYMMDDHHMMSS」で期限切れとなる日時を指定するか、「:」で区切って「開始:終了」のように指定する。「+」「-」記号で期間を示すことも可能 |
-z シリアル番号 | 証明書に埋め込むシリアル番号を指定する |
-L | 証明書の内容を表示する |
-k | KRL(Key Revocation List、鍵失効リスト)ファイルを生成する(「-f」で出力ファイルを指定、「-u」を併用するとファイルに追加、「-s」でCA鍵のパス、「-z」でシリアル番号を指定) |
-Q | -fでKRLファイルを指定し、鍵がKRLで失効したものとして指定されているかを検査する(「-Q -f KRLファイル 対象ファイル」で実行) |
※1 PKCS(Public-Key Cryptography Standards)は公開鍵暗号標準のグループ。PKCS#11はスマートカードなどのハードウェアデバイスを使用する認証サポートを提供する。
短いオプション | 意味 |
---|---|
-A | ホスト鍵(/etc/ssh/ssh_host_key、/etc/ssh/ssh_host_dsa_key)を生成する(root権限が必要) |
-l | 公開鍵ファイルの指紋(fingerprint)を表示する |
-B | 公開鍵ファイルや秘密鍵ファイルのbubblebabbleダイジェストを表示する |
-q | メッセージを表示しない |
-v | 詳細なメッセージを表示 |
「ssh-keygen」を実行すると、対話式で公開鍵と秘密鍵を作成できます(画面1)。
まず、画面のメッセージに従い、鍵を保存するファイル名を指定します。デフォルトではホームディレクトリの「.ssh」ディレクトリ下に生成します。
続いて、パスフレーズを入力します。パスフレーズとは、パスワードよりも長く複雑に指定できる文字列のことで、空白を含めた文章を入力することも可能です。ここでは5文字以上のパスフレーズを2回入力します。
パスフレーズを入力すると、公開鍵と秘密鍵を生成後、さらに、公開鍵の「指紋(fingerprint)」を表示します。公開鍵は接続先のSSHサーバなどにコピーしますが、指紋は、その公開鍵ファイルが正しいものかどうかを確認する際に使用します。
指紋の後ろに表示されている部分はコメントです。デフォルトでは「ユーザー名@ホスト名」となっています。この部分が不要な場合は、「-C」オプションを使い、「ssh-keygen -C ""」のように実行します。
指紋に続いて、「randomart」図を表示します。randomartも公開鍵に基づいて生成されるもので、正しい公開鍵を使用しているかどうかを視覚的に確認しやすくするために使います。例えば、「ssh -o VisualHostKey=yes」のように接続すると、接続時にこのrandomartを表示します(※2)。
※2 「VisualHostKey=yes」を常に指定したい場合は、設定ファイル「~/.ssh/config」に「VisualHostKey=yes」という行を追加する。もしも鍵が変更されるとrandomartの表示が変化するため、鍵の改ざんに気付きやすくなる。
なお、指紋は「ssh-keygen -l」で、いつでも表示できます(画面2)。
ssh-keygen
(公開鍵と秘密鍵を生成する)(画面1)
ssh-keygen -C ""
(公開鍵と秘密鍵をコメントなしで生成する)
ssh-keygen -l
(指紋を表示する)(画面2)
ssh-keygen -l -f 鍵ファイル
(-fオプションで指定した鍵ファイルの指紋を表示する)
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.