SSH-KEYGEN (1)

OpenSSH-5.6p1 日本語マニュアルページ (2010/08/27)


名前

ssh-keygen
認証用の鍵を生成、管理、および変換する

書式

ssh-keygen [-q ] [-b ビット数 ] -t 鍵の種類 [-N 新しいパスフレーズ ] [-C コメント (訳注:SSH1のみ)] [-f 出力先identityファイル ]

ssh-keygen -p [-P 古いパスフレーズ ] [-N 新しいパスフレーズ ] [-f パスフレーズを変更するidentityファイル ]

ssh-keygen -i [-m 鍵の形式 ] [-f 変換するidentityファイル ]

ssh-keygen -e [-m 鍵の形式 ] [-f 変換するidentityファイル ]

ssh-keygen -y [-f identityファイル ]

ssh-keygen -c [-P パスフレーズ ] [-C コメント ] [-f コメントを変更するidentityファイル ]

ssh-keygen -l [-f 指紋を表示するidentityファイル ]

ssh-keygen -B [-f ダイジェストを表示するidentityファイル ]

ssh-keygen -D pkcs11

ssh-keygen -F ホスト名 [-f known_hostsファイル ] [-l ]

ssh-keygen -H [-f known_hostsファイル ]

ssh-keygen -R ホスト名 [-f known_hostsファイル ]

ssh-keygen -r ホスト名 [-f 入力するidentityファイル ] [-g ]

ssh-keygen -G 出力ファイル [-v ] [-b ビット数 ] [-M 使用メモリ量 ] [-S 開始位置 ]

ssh-keygen -T 出力ファイル -f 入力ファイル [-v ] [-a 試行回数 ] [-W ジェネレータ ]

ssh-keygen -s CA鍵 -I 証明書の秘密鍵 [-h ] [-n principal ] [-O オプション ] [-V 有効期間 ] [-z シリアル番号 ] file

ssh-keygen -L [-f 入力する鍵ファイル ]


説明

ssh-keygenssh (1) で認証に使う鍵を生成、管理および変換します。ssh-keygen は SSH プロトコル バージョン 1 で使われる RSA 鍵と、SSH プロトコル バージョン 2 で使われる RSA 鍵および DSA 鍵を生成できます。生成する鍵の種類は-t オプションによって指定できます。この指定がない場合、ssh-keygen は SSH プロトコル バージョン 2 で使われる RSA 鍵を生成します。

ssh-keygen は Diffie-Hellman 群交換 (DH-GEX) で使われる群を生成するのにも使用します。詳しくは、係数 (modulus) の生成の項を参照してください。

ふつう、RSA 認証 または DSA 認証で SSH を使いたいユーザは、一度このプログラムを実行すれば~/.ssh/identity~/.ssh/id_dsaまたは~/.ssh/id_rsaに鍵 (identity ファイル) を作ることができます。また/etc/rcなどで見られるように、システム管理者がホスト鍵を生成するためにこのプログラムを使うこともできます。

通常、このプログラムは鍵を生成したあと、その鍵 (identity) をどのファイルに格納すればよいのか尋ねます。公開鍵は、秘密鍵を含む identityファイルの名前に".pub"をつけた名前のファイルとして格納されます。またこのプログラムはパスフレーズも尋ねてきます。任意の長さの文字列をパスフレーズとして使用することができます。パスフレーズをつけないときには、これは空でもかまいません(ホスト鍵のパスフレーズは必ず空でなければいけません)。パスフレーズはパスワードに似ていますが、パスワードとは違って単語の列や句読点、数値、空白など、好きな文字を含めることができます。よいパスフレーズとは、10〜30 文字程度の長さで、簡単な文章や容易に推測できるものではないことです (英語の散文では 1 文字あたりのエントロピーはわずか 1〜2 ビットしかなく、パスフレーズとしては非常に望ましくありません)。また大文字と小文字が混じっているものがよいでしょう。パスフレーズは-p オプションによって、後から変更することもできます。

失われてしまったパスフレーズをもとに戻すことはできません。もしパスフレーズを忘れてしまったり、なくしてしまったときには、新しい鍵を生成してその公開鍵を別のマシンにコピーしなくてはならないでしょう。

RSA1 鍵 (訳注: SSH1 で使う鍵) の場合、鍵のファイルにはコメントフィールドがあります。これはユーザが鍵を区別するためだけに便宜的に用意されているものです(訳注: SSH2 の鍵にはコメントはありません)。コメントには鍵の用途やその他有用な情報を書いておくことができます。最初に鍵が作られるとき、コメントは"user@host"の形に初期化されますが、-c オプションを使えば変更することができます。

鍵を生成したあと、それを使用可能にするためにどこに置けばよいかは後で説明しています。

オプションには次のようなものがあります:

-a 試行回数
-T コマンドを使うときに、DH-GEX 群の候補をスクリーニングするために何回の素数判定テストをおこなうかを指定します。

-B
指定された秘密鍵あるいは公開鍵ファイルの bubblebabble ダイジェストを表示します。

-b ビット数
生成する鍵のビット数を指定します。RSA 鍵の場合、最小のサイズは 768 ビットであり、デフォルトは 2048 ビットです。ふつうは 2048 ビットの鍵で充分だと考えられています。DSA 鍵の場合、FIPS 186-2 の規定によりサイズは正確に 1024 ビットでなければなりません。

-C コメント
新しいコメントを追加します。

-c
秘密鍵ファイルおよび公開鍵ファイルのコメントを変更します。このオプションは プロトコル バージョン 1 における RSA 鍵に対してのみ有効です。まず秘密鍵の入っているファイル名を訊かれ、パスフレーズがあればそれを入力したあとに新しいコメントを入力します。

-D pkcs11
ここで指定する PKCS#11 共有ライブラリpkcs11 に格納されている RSA 公開鍵を読み込みます。-s と一緒に使用された場合、このオプションは CA 鍵が PKCS#11 トークン中に格納されていることを指定します。(詳しくは証明書のセクションをごらんください)

-e
このオプションは OpenSSH 形式の秘密鍵あるいは公開鍵ファイルを読み、-m オプションで指定された形式で標準出力に表示します。デフォルトの形式は"RFC4716"です。このオプションを使うと、OpenSSH の鍵をいくつかの商用 SSH 実装で使われている形式の鍵に変換できます。

-F ホスト名
指定されたホスト名known_hostsファイルの中から探し、見つかったものを一覧表示します。このオプションはハッシュされたホスト名あるいは IP アドレスを見つけるのに有用です。また、-H オプションと組み合わせてハッシュされた形式の公開鍵を表示するのにも使えます。

-f ファイル名
鍵を格納するファイル名を指定します。

-G 出力ファイル名
DH-GEX のための素数候補を生成します。これらの素数は安全性のため (-T オプションを使って) 実際の使用前にスクリーニングする必要があります。

-g
-r コマンドを使って指紋のレコードを表示する際に、Generic DNS 形式を使用します。

-H
known_hostsファイルをハッシュし、その結果を標準出力に表示します。これはすべてのホスト名および IP アドレスをハッシュされた表現で置き換え、そのファイルを更新します。古いファイルはサフィックス .old がついた名前で保存されます。ssh およびsshd は、これらのハッシュ表現を普通に扱うことができますが、これによって、たとえファイルの内容が見えても識別可能な情報が明らかになることはありません。このオプションはすでに存在するハッシュされたホスト名を修正することはしないため、ハッシュされた表現とハッシュされていない表現が混在したファイルに対してこのオプションを適用しても安全です。

-h
鍵に署名するさい、ユーザ証明書のかわりにホスト証明書を作成します。詳しくは、証明書のセクションをごらんください。

-I 証明書の秘密鍵
公開鍵に署名するさいに使用する鍵を指定します。詳しくは、証明書のセクションをごらんください。

-i
このオプションは、暗号化されていない秘密鍵 (あるいは公開鍵) ファイルを読み、それを OpenSSH 互換の秘密鍵 (あるいは公開鍵) に変換して標準出力に表示します。鍵の形式は-m オプションによって指定されます。このオプションを使うと、いくつかの商用 SSH 実装で使われている鍵を OpenSSH で使用できます。デフォルトの形式は、"RFC4716"です。

-L
証明書の内容を表示します。

-l
指定された秘密鍵ファイルあるいは公開鍵ファイルの指紋 (fingerprint) を表示します。プロトコル バージョン 1 におけるRSA 鍵 (RSA1) もサポートされています。プロトコル バージョン 2 の RSA および DSA 鍵の場合、ssh-keygen はそれに該当する公開鍵ファイルを探し出してその指紋を表示します。-v オプションがつけられた場合、その鍵の指紋を表現したアスキーアートも表示します。

-M メモリ
DH-GEX のモジュロとなる素数候補を生成する際のメモリ消費量を (メガバイト単位で) 指定します。

-m 鍵の形式
鍵を変換する-i オプション (import) あるいは-e オプション (export) で使われる鍵の形式を指定します。サポートされている形式は:"RFC4716"(RFC 4716/SSH2 の公開鍵あるいは秘密鍵)、"PKCS8"(PEM PKCS8 の公開鍵)あるいは"PEM"(PEM の公開鍵) です。デフォルトの形式は、"RFC4716"になっています。

-N 新しいパスフレーズ
新しいパスフレーズを指定します。

-n principal
鍵に署名する際に証明書に含める、ひとつあるいは複数のprincipal (ユーザまたはホスト名) を指定します。複数の principal を指定する場合はカンマで区切ります。詳しくは、証明書のセクションをごらんください。

-O オプション
鍵を署名する際に使う証明書のオプションを指定します。このオプションは複数回、指定することができます。詳しくは、証明書のセクションをごらんください。

ユーザ証明書に対して有効なオプション:

clear
すべての許可されたパーミッションを削除します。このオプションは、デフォルトで指定されているパーミッションを解除し、個別に指定するさいに使われます。

force-command =コマンド
この証明書を使って認証した際に、シェルやユーザが指定したコマンドではなく、ここで指定したコマンド を強制的に実行させます。

no-agent-forwarding
認証エージェントssh-agent (1) の転送を禁止します(デフォルトでは許可されています)。

no-port-forwarding
ポート転送を禁止します(デフォルトでは許可されています)。

no-pty
PTYの割り当てを禁止します(デフォルトでは許可されています)。

no-user-rc
sshd (8) による~/.ssh/rcの実行を禁止します。(デフォルトでは許可されています)。

no-x11-forwarding
X11転送を禁止します(デフォルトでは許可されています)。

permit-agent-forwarding
認証エージェントssh-agent (1) の転送を許可します。

permit-port-forwarding
ポート転送を許可します。

permit-pty
PTR の割り当てを許可します。

permit-user-rc
sshd (8) による~/.ssh/rcの実行を許可します。

permit-x11-forwarding
X11転送を許可します。

source-address =アドレス一覧
この証明書が有効であると判断される接続元アドレスを制限します。アドレス一覧 には、カンマで区切られたひとつあるいは複数の address/netmask 対をCIDR形式で記述します。

現在のところ、ホスト鍵に対して有効なオプションはありません。

-P パスフレーズ
(古い) パスフレーズを指定します。

-p
新しく秘密鍵をつくるのではなく、すでにある秘密鍵ファイルのパスフレーズを変更します。まず秘密鍵の入っているファイルを訊かれ、古いパスフレーズを入力したあと、新しいパスワードを 2 回入力します。

-q
静かなssh-keygen/etc/rcで新しい鍵をつくるときに使われます。

-R ホスト名
known_hostsファイルから、指定されたホスト名 に属する鍵をすべて取り除きます。このオプションはハッシュされたホスト (上記の-H オプションを参照) をファイルから取り除くのに有用です。

-r ホスト名
指定された公開鍵に対するホスト名 の SSHFP fingerprint 資源レコードを表示します。

-S 開始点
DH-GEX のモジュロとなる素数候補を生成する際の開始点を (16 進で) 指定します。

-s CA鍵
指定された CAの鍵を用いて公開鍵に署名 (証明) します。詳しくは、証明書のセクションをごらんください。

-T 出力ファイル
(-G オプションで生成された) DH 群交換のための素数候補に対して、安全性の試験をおこないます。

-t 鍵の種類
生成する鍵の種類を指定します。とりうる値として、プロトコル バージョン 1 で使う"rsa1"、およびプロトコル バージョン 2 で使う"rsa"または"dsa"があります。

-V 有効期間
証明書に署名するときの有効期間を指定します。有効期間には単一の日時が指定されていることがあり、この場合、その証明書が現在からある特定の日時まで有効であることを示しています。また、有効期間としてコロンで区切った2つの時刻が指定されている場合、これらは証明書が有効な開始時刻と終了時刻を示しています。開始日時は YYYYMMDD の形式で日付だけを示すか、YYYYMMDDHHMMSS の形式で日付と時刻を示すことができます。あるいは、マイナス記号をつけた (現在からの)相対的な日時を指定することもできます。この場合はsshd_config (5)時間の表現で解説されている形式にしたがいます。終了日時は YYYYMMDD の日付、 YYYYMMDDHHMMSS の時刻、あるいはプラス記号をつけた相対日時を指定することができます。

例:"+52w1d"(現在から 52週間と 1日間のあいだ有効)"-4w:+4w"(4週間前から4週間後まで有効)"20100101123000:20110101123000"(2010年1月1日 午後12時30分から、2011年1月1日 午後12時30分まで有効)"-1d:20110101"(昨日から2011年1月1日の午前0時まで有効)

-v
冗長表示モード。ssh-keygen が進行中のデバッグメッセージを表示するようにします。これはモジュロ生成のデバッグ時に役立ちます。複数の-v オプションをつけると出力が増えます。最大は 3 個です。

-W ジェネレータ
DH-GEX 用の素数候補を検査するときのジェネレータを指定します。

-y
このオプションは OpenSSH 形式の秘密鍵ファイルを読み、OpenSSH 形式の公開鍵を標準出力に表示します。

-z シリアル番号
証明書に埋めこむシリアル番号を指定します。これは、同一の CA から発行された複数の証明書を区別するのに使います。デフォルトでは、シリアル番号はゼロになります。

係数 (modulus) の生成

ssh-keygen は、Diffie-Hellman 群交換 (Diffie-Hellman Group Exchange, DH-GEX) のための群を生成するのにも使うことができます。この群を生成するには、2 つの段階をふむ必要があります:まず、素数の候補が生成されます。これは高速ですが、メモリを消費します。つぎにこれらの候補が適切かどうか検査されます (このときは CPU 時間を消費します)。

この素数の生成は-G オプションによっておこなえます。必要な素数の長さは、-b オプションで指定することができます。たとえば:

# ssh-keygen-Gmoduli-2048.candidates-b2048

デフォルトでは、素数の探索は指定された長さの区間でランダムに選ばれた位置から開始されます。この開始位置は-S オプションによって変更することができます。

候補となる素数の集合が生成されたあとは、それらが適切かどうかを検査する必要があります。これは-T オプションを使っておこなえます。この場合、ssh-keygen は標準入力 (あるいは-f オプションで指定したファイル) から候補を読み込みます。たとえば:

# ssh-keygen-Tmoduli-2048-fmoduli-2048.candidates

デフォルトでは、候補となる各素数は 100回の素数判定テストにかけられます。この回数は、-a オプションによって変更することができます。DH ジェネレータの値は探索中の素数のために自動的に選ばれます。特定のジェネレータが必要な場合は、-W オプションによって指定することができます。許されるジェネレータの値は 2、3 あるいは 5 です。

最終的にスクリーニングされた DH 群は/etc/moduliにインストールすることができます。注意: このファイルはある範囲のビット長の係数 (modulus) を格納しており、この数は 2つの通信端点間で同じものである必要があります。


証明書

ssh-keygen は、鍵に署名する機能をサポートしています。これによって、ユーザあるいはホスト認証時に使うことのできる証明書を生成することができます。証明書は、以下のものからなっています:公開鍵、なんらかの識別情報、0個以上の principal名(ユーザまたはホスト名)、およびオプションの集合が、認証局 (Certification Authority, CA) の鍵によって電子署名されます。このようにすることで、クライアントやサーバは沢山のユーザ鍵やホスト鍵をすべて信頼しなくても、証明書を検証する際の CA 鍵だけを信頼すればよいことになります。注意: OpenSSH の証明書は、ssl (8) で使われている X.509 形式の証明書とはまったく異なる、かなりシンプルな形式になっています。

ssh-keygen では、2種類の証明書をサポートしています:ユーザ証明書とホスト証明書です。ユーザ証明書は、サーバに対してユーザを認証します。これに対してホスト証明書は、サーバに対してホストを認証します。ユーザ証明書を生成する方法:

$ ssh-keygen-s/path/to/ca_key-Ikey_id/path/to/user_key.pub

生成された証明書は、/path/to/user_key-cert.pubに置かれます。ホスト証明書を作る際には、-h オプションが必要です:

$ ssh-keygen-s/path/to/ca_key-Ikey_id-h/path/to/host_key.pub

生成されたホスト証明書は、/path/to/host_key-cert.pubに置かれます。

-D オプションを使って、トークンのライブラリを指定することでPKCS#11 トークン中に格納された CA鍵に署名することも可能です。このさい、CA鍵の公開部を-s 引数で指定します:

$ ssh-keygen-sca_key.pub-Dlibpkcs11.so-Ikey_idhost_key.pub

いずれの場合も、key_id は「鍵識別子」を表しており、これはその証明書が認証に使われた際にはサーバ側にログとして残ります。

証明書は、ある特定の principal (ユーザあるいはホスト) に対してのみ有効なように制限することもできます。デフォルトでは、生成された証明書はすべてのユーザおよびホストに対して有効です。特定の principal のみに有効な証明書を作るには:

$ ssh-keygen-sca_key-Ikey_id-nuser1,user2user_key.pub
$ ssh-keygen -s ca_key -I key_id -h -n host.domain user_key.pub

ユーザ証明書のこれ以外の有効性や使用条件に関する制限は、証明書につけたオプションによって指定できます。証明書のオプションを使うと、SSHセッション時に特定の機能を禁止できたり、特定の接続元から提示したときのみ有効であるように設定できたり、また特定のコマンドのみを実行させたり、といったことができます。有効な証明書オプションについては、-O オプションに関する上記の解説を参考にしてください。

最後に、証明書には有効期間を定めることができます。-V オプションを使うと、証明書の開始日時と終了日時を指定できます。この範囲を過ぎてから提示された証明書は、無効とみなされます。デフォルトでは、証明書の有効期間は最大になっています。

ユーザあるいはホスト認証時に使われる鍵と、CA の公開鍵はsshd (8) またはssh (1) によって信頼されている必要があります。詳しくはこれらのコマンドのマニュアルページを参照してください。


関連ファイル

~/.ssh/identity
そのユーザの、プロトコル バージョン 1 におけるRSA 認証用の秘密鍵を格納します。このファイルはそのユーザ以外の誰にも見せてはいけません。この鍵を生成するときにパスフレーズを指定することもできます。パスフレーズは、128-bit AES を使ってファイル中の秘密鍵の部分を暗号化するのに用いられます。このファイルはssh-keygen によって自動的にアクセスされるわけではありませんが、秘密鍵ファイルのデフォルトの名前としてこれが提案されます。ssh (1) はログイン要求があった際にこのファイルを読み込みます。

~/.ssh/identity.pub
プロトコル バージョン 1 における RSA 認証用の公開鍵を格納します。そのユーザが RSA 認証でログインしたいすべてのマシンの~/.ssh/authorized_keysにこのファイルの内容を追加しておいてください。このファイルの内容を秘密にしておく必要はありません。

~/.ssh/id_dsa
そのユーザの、プロトコル バージョン 2 におけるDSA 認証用の秘密鍵を格納します。このファイルはそのユーザ以外の誰にも見せてはいけません。この鍵を生成するときにパスフレーズを指定することもできます。パスフレーズは、128-bit AES を使ってファイル中の秘密鍵の部分を暗号化するのに用いられます。このファイルはssh-keygen によって自動的にアクセスされるわけではありませんが、秘密鍵ファイルのデフォルトの名前としてこれが提案されます。ssh (1) はログイン要求があった際にこのファイルを読み込みます。

~/.ssh/id_dsa.pub
プロトコル バージョン 2 における DSA 認証用の公開鍵を格納します。そのユーザが DSA 認証でログインしたいすべてのマシンの~/.ssh/authorized_keysにこのファイルの内容を追加しておいてください。このファイルの内容を秘密にしておく必要はありません。

~/.ssh/id_rsa
そのユーザの、プロトコル バージョン 2 におけるRSA 認証用の秘密鍵を格納します。このファイルはそのユーザ以外の誰にも見せてはいけません。この鍵を生成するときにパスフレーズを指定することもできます。パスフレーズは、128-bit AES を使ってファイル中の秘密鍵の部分を暗号化するのに用いられます。このファイルはssh-keygen によって自動的にアクセスされるわけではありませんが、秘密鍵ファイルのデフォルトの名前としてこれが提案されます。ssh (1) はログイン要求があった際にこのファイルを読み込みます。

~/.ssh/id_rsa.pub
プロトコル バージョン 2 における RSA 認証用の公開鍵を格納します。そのユーザが RSA 認証でログインしたいすべてのマシンの~/.ssh/authorized_keysにこのファイルの内容を追加しておいてください。このファイルの内容を秘密にしておく必要はありません。

/etc/moduli
DH-GEX で使われる Diffie-Hellman 群を格納します。このファイル形式については、moduli (5) を参照してください。

関連項目

ssh (1), ssh-add (1), ssh-agent (1), moduli (5), sshd (8)

作者

OpenSSH は Tatu Ylonen による、フリーなオリジナル版 ssh 1.2.12 リリースから派生したものです。Aaron Campbell、 Bob Beck、 Markus Friedl、 Niels Provos、Theo de Raadt および Dug Song が多くのバグを取り除き、新しい機能をふたたび追加して OpenSSH をつくりました。SSH プロトコル バージョン 1.5 および 2.0 のサポートはMarkus Friedl の貢献によるものです。