SSH-KEYGEN(1)

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

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

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

ssh-keygen -i [-f 変換するidentityファイル]

ssh-keygen -e [-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 reader

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

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

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

ssh-keygen -U リーダ [-f 入力するidentityファイル]

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

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

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

説明
ssh-keygen は ssh(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 reader
    スマートカード reader に格納されている RSA 公開鍵を読み込みます。

-e  このオプションは OpenSSH 形式の秘密鍵あるいは公開鍵ファイルを 読み、 ‘SECSH Public Key File Format (SECSH 公開鍵ファイル形式)’ の鍵を標準出力に表示します。 このオプションを使うと、OpenSSH の鍵を いくつかの商用 SSH 実装で使われている形式の鍵に変換できます。

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

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

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

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

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

-i  このオプションは SSH2-互換の形式である、暗号化されていない 秘密鍵 (あるいは公開鍵) ファイルを読み、それを OpenSSH 互換の秘密鍵 (あるいは公開鍵) に変換して 標準出力に表示します。 ssh-keygen は ‘SECSH Public Key File Format (SECSH 公開鍵ファイル形式)’ の鍵も読み込めます。 このオプションを使うと、いくつかの商用 SSH 実装で使われている 鍵を OpenSSH で使用できます。

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

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

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

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

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

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

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

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

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

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

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

-U リーダ
    すでに存在している RSA 公開鍵をスマートカード リーダ にアップロードします。

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

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

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

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

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

    # ssh-keygen -G moduli-2048.candidates -b 2048

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

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

    # ssh-keygen -T moduli-2048 -f moduli-2048.candidates

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

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

関連ファイル

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

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

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

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

~/.ssh/id_rsa
    そのユーザの、プロトコル バージョン 2 における RSA 認証用の秘密鍵を格納します。このファイルはその ユーザ以外の誰にも見せてはいけません。この鍵を生成するときに パスフレーズを指定することもできます。パスフレーズは、3DES を使って ファイル中の秘密鍵の部分を暗号化するのに用いられます。このファイルは 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) J. Galbraith, R. Thayer, SECSH Public Key File Format, draft-ietf-secsh-publickeyfile-01.txt, March 2001, work in progress material.

作者
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 の貢献によるものです。