ssh-keygen — OpenSSH authentication key utility

SYNOPSIS

    ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile] [-m format] [-N new_passphrase] [-O option]
               [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider]
    ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase] [-P old_passphrase]
    ssh-keygen -i [-f input_keyfile] [-m key_format]
    ssh-keygen -e [-f input_keyfile] [-m key_format]
    ssh-keygen -y [-f input_keyfile]
    ssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]
    ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
    ssh-keygen -B [-f input_keyfile]
    ssh-keygen -D pkcs11
    ssh-keygen -F hostname [-lv] [-f known_hosts_file]
    ssh-keygen -H [-f known_hosts_file]
    ssh-keygen -K [-a rounds] [-w provider]
    ssh-keygen -R hostname [-f known_hosts_file]
    ssh-keygen -r hostname [-g] [-f input_keyfile]
    ssh-keygen -M generate [-O option] output_file
    ssh-keygen -M screen [-f input_file] [-O option] output_file
    ssh-keygen -I certificate_identity -s ca_key [-hU] [-D pkcs11_provider] [-n principals] [-O option]
               [-V validity_interval] [-z serial_number] file ...
    ssh-keygen -L [-f input_keyfile]
    ssh-keygen -A [-a rounds] [-f prefix_path]
    ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ...
    ssh-keygen -Q [-l] -f krl_file file ...
    ssh-keygen -Y find-principals -s signature_file -f allowed_signers_file
    ssh-keygen -Y check-novalidate -n namespace -s signature_file
    ssh-keygen -Y sign -f key_file -n namespace file ...
    ssh-keygen -Y verify -f allowed_signers_file -I signer_identity -n namespace -s signature_file
               [-r revocation_file]

DESCRIPTION

ssh-keygen は ssh 用の認証鍵を生成,管理,変換する。 ssh-keygen は SSH プロトコル バージョン 2 で使用する鍵を生成することができる。

生成する鍵の種類は、-t オプションで指定する。 引数なしで起動した場合、ssh-keygen は RSA 鍵を生成する。

ssh-keygen は、Diffie-Hellman グループ交換 (DH-GEX) で使用するグループを生成するためにも使用される。 詳細については、#MODULI GENERATIONのセクションを参照すること。

最後に、ssh-keygen は Key Revocation Lists を生成および更新したり、 指定された鍵が 1 つの鍵によって取り消されたかどうかをテストするために使用できる。 詳細については、#KEY REVOCATION LISTSのセクションを参照すること。

通常、公開鍵認証で SSH を使いたい各ユーザはこれを一回実行して、 ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519, ~/.ssh/id_ed25519_sk あるいは ~/.ssh/id_rsa に認証鍵を作成する。 さらに、システム管理者は、これを使用してホスト鍵を生成することができる。

通常、このプログラムは鍵を生成し、秘密鍵を格納するためのファイルを要求する。 公開鍵は、同じ名前に".pub "を追加したファイルに保存される。 また、パスフレーズも要求される。 パスフレーズは、パスフレーズがないことを示す空でもよいし(ホスト鍵は空のパスフレーズを持つ必要がある)、任意の長さの文字列でもよい。 パスフレーズはパスワードに似ているが、単語、句読点、数字、空白、または任意の文字列を連続させたフレーズにすることができる点が異なる。 良いパスフレーズは、10〜30文字の長さで、単純な文章など容易に推測できるものでなく(英語の散文は1文字あたり1〜2ビットのエントロピーしかないため、非常に悪いパスフレーズになる)、大文字と小文字、数字、非英数字が混在しているものである。 パスフレーズは、-pオプションで後で変更することができる。

パスフレーズを紛失した場合、復元する方法はない。 パスフレーズを紛失したり忘れたりした場合は、新しい鍵を生成して、対応する公開鍵を 他のマシンにコピーする必要がある。

ssh-keygen は、デフォルトで OpenSSH 固有のフォーマットで鍵を書き込む。 この形式は、秘密鍵ファイル自体に鍵のコメントを保存することができ、 鍵の静止状態をよりよく保護することができるため、推奨されている。 鍵のコメントは、鍵を特定するのに役立つかもしれない。 鍵の作成時、コメントは「user@host」に初期化されるが、-c オプションを使用して 変更することができる。

ssh-keygen では、-m フラグを使用して、以前使用されていた PEM 形式の秘密鍵を書き込むことも可能である。 これは、新しい鍵を生成するときに使用でき、既存の新形式の鍵は、このオプションと -p (change passphrase) フラグを組み合わせて使用して変換できる。

鍵の生成後、ssh-keygen は、鍵をどこに置いて有効にするかを尋ねる。

オプションは次のとおり:

-A
ホスト鍵が存在しない鍵の種類 (rsa、dsa、ecdsa、ed25519) それぞれについて、既定の鍵ファイルのパス、空のパスフレーズ、鍵の種類の既定のビット、および既定のコメントを使用してホスト鍵を生成する。 -f も指定されている場合、その引数は結果のホスト鍵ファイルの既定のパスの接頭辞として使用される。 これは、システム管理スクリプトが新しいホスト鍵を生成するために使用される。
-a rounds
秘密鍵を保存する際に、このオプションでKDF (鍵導出関数) のラウンド数を指定する。この数を大きくすると、パスフレーズ認証が遅くなり、ブルートフォースパスワードクラッキングに対する耐性が高まる (鍵が盗まれた場合)。 デフォルトは16ラウンドである。
-B
指定された秘密鍵または公開鍵ファイルのバブルバブルダイジェストを表示する。
-b bits
作成する鍵のビット数を指定する。 RSA鍵の場合、最小サイズは1024ビットで、デフォルトは3072ビットである。 一般に、3072ビットで十分だと考えられている。 DSA 鍵は、FIPS 186-2 で規定されているように、正確に 1024 ビットでなければならない。 ECDSA鍵の場合、-bフラグは、256、384、521ビットの3つの楕円曲線サイズから1つを選択して 鍵長を決定する。 ECDSAの鍵にこれら3つの値以外のビット長を使おうとすると失敗する。 ECDSA-SK, Ed25519, Ed25519-SK の鍵長は固定されており、-b フラグは無視される。
-C comment
新しいコメントを提供する。
-c
秘密鍵と公開鍵のファイルのコメントを変更するよう要求する。 プログラムは、秘密鍵を含むファイル、鍵にパスフレーズがある場合はパスフレーズ、そして新しいコメントの入力を促す。
-D pkcs11
PKCS#11 共有ライブラリ pkcs11 が提供する公開鍵をダウンロードする。 このオプションは、-s と組み合わせて使用すると、CA 鍵が PKCS#11 トークンに存在することを示す(詳細は #CERTIFICATESのセクションを参照すること)。
-E fingerprint_hash
鍵のfingerprintを表示する際に使用するハッシュアルゴリズムを指定する。 有効なオプションは "md5" および "sha256" である。 デフォルトは "sha256 "である。
-e
このオプションは、OpenSSH の秘密鍵ファイルまたは公開鍵ファイルを読み込んで、 -m オプションで指定されたいずれかの形式で標準出力に公開鍵を出力する。 デフォルトのエクスポート形式は "RFC4716" である。 このオプションを使うと、OpenSSH の鍵をエクスポートして他のプログラム (いくつかの商用 SSH 実装を含む) で使えるようにすることができる。
-F hostname | [hostname]:port
known_hosts ファイルから指定されたホスト名 (オプションでポート番号も) を検索し、見つかったものをすべてリストアップする。 このオプションは、ハッシュ化されたホスト名やアドレスを見つけるのに便利である。また、-H オプションと組み合わせて、見つかったキーをハッシュ化された形式で表示することもできる。
-f filename
鍵ファイルファイル名を指定する。
-g
-r コマンドを使用してfingerprint リソース レコードを印刷する場合は、一般的な DNS 形式を使用する。
-H
known_hosts ファイルをハッシュ化する。 これは、すべてのホスト名とアドレスを指定されたファイル内のハッシュ化された表現に置き換える。元のコンテンツは、接尾辞が .old のファイルに移動される。 これらのハッシュは ssh および sshd で通常使用できるが、ファイルの内容が公開された場合、 識別情報は表示されない。 このオプションは、既存のハッシュされたホスト名を変更しないため、ハッシュされた名前とハッ シュされていない名前が混在するファイルに対して使用しても安全である。
-h
鍵に署名する場合、ユーザー証明書の代わりにホスト証明書を作成する。 詳しくは#CERTIFICATESの項を参照。
-I certificate_identity
公開鍵に署名する際に、鍵のIDを指定する。 詳細は、#CERTIFICATESの項を参照。
-i
このオプションは、暗号化されていない秘密鍵 (または公開鍵) ファイルを -m オプションで指定された形式で読み込み、 OpenSSH 互換の秘密鍵 (または公開鍵) を標準出力に表示する。 このオプションは、いくつかの商用 SSH 実装を含む他のソフトウェアから鍵をインポートすることを可能にする。 デフォルトのインポート形式は "RFC4716" である。
-K
FIDO認証機から常駐鍵をダウンロードする。 公開鍵と秘密鍵のファイルは、ダウンロードした鍵ごとにカレントディレクトリに書き込まれる。 複数のFIDO認証機が接続されている場合、最初にタッチした認証機から鍵をダウンロードする。
-k
KRL ファイルを生成する。 このモードでは、ssh-keygen は、コマンドラインで提示されたすべての鍵または証明書を失効 させる KRL ファイルを -f フラグで指定された場所に生成する。 取り消す鍵/証明書は、公開鍵ファイルまたは「#KEY REVOCATION LISTS」セクションで説明されている形式を使用して指定できる。
-L
1 つまたは複数の証明書の内容を表示する。
-l
指定された公開鍵ファイルのfingerprintを表示する。 RSA および DSA 鍵の場合、ssh-keygen は一致する公開鍵ファイルを見つけようと試み、その指紋を表示する。 -v と組み合わせると、鍵の視覚的な ASCII アート表現が指紋とともに提供される。
-M generate
diffie-hellman-group-exchange-*' 鍵交換方式で最終的に使用するための Diffie-Hellman Group Exchange (DH-GEX) パラメータの候補を生成する。 この操作によって生成された数値は、使用前にさらにスクリーニングされなければならない。 詳細については、#MODULI GENERATIONのセクションを参照。.
-m key_format
鍵生成、-i (インポート)、-e (エクスポート) 変換オプション、および -p パスフレーズ変更操作のための鍵形式を指定する。 後者は OpenSSH 秘密鍵形式と PEM 秘密鍵形式間の変換に使用されることがある。 対応している鍵の形式は以下の通り。"RFC4716" (RFC 4716/SSH2 公開鍵または秘密鍵)、 "PKCS8" (PKCS8 公開鍵または秘密鍵)、 "PEM" (PEM 公開鍵) のいずれかである。 デフォルトでは、OpenSSH は新しく生成された秘密鍵を独自のフォーマットで書き込むが、エクスポート用に公開鍵を変換するときは、デフォルトのフォーマットは "RFC4716" になる。 サポートされている秘密鍵の種類を生成したり更新したりする際に "PEM" という形式を設定すると、その鍵は従来の PEM 秘密鍵形式で保存されるようになる。
-N new_passphrase
新しいパスフレーズを提供する。
-n principals
鍵の署名時に証明書に含めるプリンシパル(ユーザー名またはホスト名)を1つ以上指定する。カンマ区切りで複数のプリンシパルを指定することができる。 詳細は、「#CERTIFICATES」セクションを参照。
-O option
key/value オプションを指定する。 これらは、ssh-keygen が実行するよう要求された操作に固有である。
証明書に署名する場合は、「#CERTIFICATES」セクションに記載されているオプションの 1 つを ここで指定できる。
モジュールの生成またはスクリーニングを行う場合は、「#MODULI GENERATION」セクショ ンに記載されているオプションのいずれかを指定できる。
FIDO 認証サーバで使用する鍵を生成する場合は、 このフラグを使用して鍵固有のオプションを指定することができる。 現在サポートされているものは以下のとおり。
application
デフォルトのFIDOアプリケーション/オリジン文字列である"ssh:"を上書きする。 これは、ホストまたはドメイン固有の常駐鍵を生成する場合に便利である。 指定するアプリケーションの文字列は、"ssh: "で始まる必要がある。
challenge=path
鍵生成時に FIDO トークンに渡されるチャレンジ文字列へのパスを指定する。 チャレンジストリングは、鍵の登録のための帯域外のプロトコルの一部として使用することができる(デフォルトではランダムなチャレンジが使用される)。
device
トークンミドルウェアに選択させるのではなく、使用する fido(4) デバイスを明示的に指定するように。
no-touch-required
生成された秘密鍵が署名を行う際に、タッチイベント (ユーザの存在) を必要としないようにすることを示す。 sshd は、 authorized_keys オプションで上書きされない限り、 デフォルトでそのような署名を拒否することに注意。
resident
鍵がFIDO認証機自体に保存されるべきことを示す。 常駐する鍵は FIDO2 トークンでサポートされ、通常、生成前にトークンに PIN が設定される必要がある。 常駐鍵は ssh-add を使ってトークンから読み込むことができる。
user
常駐キーに関連付けるユーザー名で、空のデフォルトユーザー名を上書きする。 ユーザー名を指定すると、同じアプリケーション名で複数のレジデントキーを生成する場合に便利である。
verify-required
この秘密鍵が、各署名にユーザー認証を必要とすることを示す。 すべてのFIDOトークンがこのオプションをサポートしているわけではない。 現在、PIN認証のみがサポートされている検証方法であるが、将来的には他の方法もサポートされる可能性がある。
write-attestation=path
鍵生成時にFIDOトークンから返される認証データを記録するために使用されることがある。 この情報は潜在的に機密であることに注意すること。 デフォルトでは、この情報は破棄される。
-Oオプションは複数回指定することができる。
-P passphrase
(古い)パスフレーズを提供する。
-p
新しい秘密鍵を作成する代わりに、秘密鍵ファイルのパスフレーズを変更することを要求する。 プログラムは、秘密鍵を含むファイル、古いパスフレーズ、および新しいパスフレーズを2回入力するよう求める。
-Q
鍵が KRL で取り消されたかどうかをテストする。 -l オプションも指定すると、KRL の内容が表示される。
-q
ssh-keygen を静音化する。
-R hostname | [hostname]:port
known_hosts ファイルから指定されたホスト名 (オプションでポート番号も) に属するすべての鍵を削除する。このオプションはハッシュ化されたホストを削除するのに便利である (上記の -H オプションを参照)。
-r hostname
指定された公開鍵ファイルについて、hostname という名前の SSHFP fingerprint リソース レコードを出力します。
-s ca_key
指定されたCA鍵を用いて公開鍵を認証(署名)する。 詳細については、「#CERTIFICATES」のセクションを参照。
KRLを生成するとき、-sは、キーIDまたはシリアル番号によって直接証明書を取り消すために使用されるCA公開鍵ファイルへのパスを指定する。 詳細については、「#KEY REVOCATION LISTS」のセクションを参照。
-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
作成する鍵の種類を指定する。 指定できる値は "dsa"、"ecdsa"、"ecdsa-sk"、"ed25519"、"ed25519-sk"、または "rsa" である。
このフラグは、RSA CA鍵を用いて証明書に署名する際に、希望の署名タイプを指定するために使用することもできる。 使用可能な RSA 署名の種類は、"ssh-rsa" (SHA1 署名、推奨しない)、"rsa-sha2-256"、 および"rsa-sha2-512" (既定) である。
-U
このオプションは、-s と組み合わせて使用すると、CA 鍵が ssh-agent に存在することを示す。 詳細については、「#CERTIFICATES」のセクションを参照。
-u
KRL を更新します。 -k と共に指定すると、新しい KRL が作成されるのではなく、コマンドラインを介してリストされた鍵が 既存の KRL に追加される。
-V validity_interval
証明書に署名する際に、有効期限を指定する。 有効期限は、証明書が現在から始まりその時点で終了することを示す単一の時間、または明示的な時間間隔を示すコロンで区切られた2つの時間から構成されることができる。
開始時刻は、証明書に特定の開始時刻がないことを示す文字列 "always"、YYYYMMDD 形式の日付、 YYYYMMDDHHMM[SS] 形式の時刻、マイナス記号と sshd_config の TIME FORMATS セクションで説明される形式の間隔からなる相対時刻 (現在の時刻に対して) として指定することができる。
終了時刻は、YYYYMMDD 日付、YYYYMMDDHHMM[SS] 時間、プラス文字で始まる相対時間、または証明書に有効期限がないことを示す "forever" 文字列で指定できる。
例えば "52w1d"(現在から52週と1日まで有効)、"-4w:+4w"(4週間前から4週間後まで有効)、"20100101123000:20110101123000"(2010年1月1日午後12時半から2011年1月1日午後12時半まで有効)、"-1d:201101#(昨日から2011年1月1日の午前零時まで有効)。"-1m:forever"(1分前から有効で、有効期限はない)。
-v
バーボーズモード。 ssh-keygen の進行状況についてデバッグメッセージを表示する。 これは、モジュールの生成のデバッグに役立つ。 複数の -v オプションを使用すると、冗長性が高まる。 最大値は 3 である。
-w provider
FIDO認証ホスト鍵を作成する際に使用するライブラリへのパスを指定し、内蔵のUSB HIDサポートを使用するデフォルトを上書きする。
-Y find-principals
署名の公開鍵に関連する principal(s) を、-f フラグで指定された authorized signers ファイルから検索する。 許可された署名者ファイルの形式は、以下の #ALLOWED SIGNERS セクションで文書化されている。 1つ以上の一致するプリンシパルが見つかった場合、それらは標準出力で返される。
-Y check-novalidate
ssh-keygen -Y sign を使用して生成された署名が有効な構造を持っていることを確認する。 これは、承認された署名者から生成された署名であるかどうかを検証するものではない。 署名をテストする場合、ssh-keygen は、標準入力上のメッセージと、-n を使用した署名の名前空 間を受け付ける。 対応する署名を含むファイルも、-s フラグを使用して提供する必要がある。 署名のテストに成功すると、ssh-keygen が 0 の終了ステータスを返すことで通知される。
-Y sign
SSH 鍵を使用して、ファイルやデータに暗号署名を行う。 署名するとき、ssh-keygen はコマンドラインで署名する 0 個以上のファイルを 受け付ける。ファイルが指定されない場合、ssh-keygen は標準入力に提示された データに署名する。 署名は、入力ファイルのパスに「.sig」を追加して書き込まれるか、署名されるメッセージが 標準入力から読み込まれた場合は標準出力に書き込まれる。
署名に使用される鍵は -f オプションで指定され、秘密鍵、または ssh-agent を介して利用可能な秘密鍵と公開鍵のいずれかを参照することができる。 署名の名前空間を追加して、異なる使用領域 (ファイル署名と電子メール署名など) にまたがる署名の混乱を防ぐために、 -n フラグを指定する必要がある。 名前空間は任意の文字列であり、以下のものを含むことができる。ファイル署名の場合は "file"、メール署名の場合は "email "といった具合である。 カスタム用途では、曖昧さのない名前空間を生成するために、NAMESPACE@YOUR.DOMAIN パターンに従った名前を使用することが推奨される。
-Y verify
上記のように ssh-keygen -Y sign を使用して生成された署名を検証するよう要求する。 署名を検証する場合、ssh-keygen は標準入力上のメッセージと、-n を使用した署名の名前空 間を受け入れる。 対応する署名を含むファイルも -s フラグを使用して提供する必要がある。また、 -I を使用して署名者の ID を、-f フラグを使用して許可される署名者のリストを提供する必要がある。 許可された署名者のファイルの形式は、以下の#ALLOWED SIGNERSセクションに記載されている。 失効した鍵を含むファイルを渡すには、-r フラグを使用する。 失効ファイルは、KRL または公開鍵の一行ごとのリストである。 認可された署名者による検証が成功すると、ssh-keygen が 0 の終了ステータスを返すことで 知らせることができる。
-y
このオプションは、OpenSSH のプライベートなフォーマットファイルを読み込んで、OpenSSH の公開鍵を標準出力に出力する。
-z serial_number
この証明書を同じ CA からの他の証明書と区別するために、証明書に埋め込むシリアル番号を指定する。 serial_number の前に '+' 文字を付けると、1 つのコマンドラインで署名した各証明書についてシリアル番号が増加する。 デフォルトのシリアル番号は 0 である。
KRLを生成するとき、-zフラグは、KRLのバージョン番号を指定するために使用される。

MODULI GENERATION

ssh-keygen は Diffie-Hellman Group Exchange (DH-GEX) プロトコルのグループを生成するために使用されることがある。 これらのグループの生成は2段階のプロセスで行われる。まず、高速ですがメモリを大量に消費するプロセスを用いて、素数の候補が生成される。 次に、これらの素数候補が適切かどうかテストされる(CPUに負荷のかかる処理)。

素数の生成は-M generateオプションで実行される。 プリムの長さは、-O bits オプションで指定できる。 例えば

          # ssh-keygen -M generate -O bits=2048 moduli-2048.candidates

デフォルトでは、素数検索は希望する長さ範囲内のランダムな点から始まる。 これは、-O startオプションで上書きすることができ、別の開始点(16進数)を指定することができる。

一連の候補が生成されたら、それらが適切であるかどうかをスクリーニングする必要がある。 これは、-M screen オプションを使用して実行できる。 このモードでは、ssh-keygen は標準入力 (または -f オプションを使用して指定されたファイル) から候補を読み取る。 たとえば、以下のようになる。

          # ssh-keygen -M screen -f moduli-2048.candidates moduli-2048

デフォルトでは、各候補は100回のプリマリティテストを受ける。 これは -O prime-tests オプションで上書きすることができる。 DHジェネレータの値は、検討中のプライムに対して自動的に選択される。 特定のジェネレータが必要な場合は、-O generator オプションで指定することができる。 有効なジェネレーター値は、2、3、および5である。

スクリーニングされた DH グループは /etc/ssh/moduli にインストールすることができる。 このファイルには、さまざまなビット長のモジュールが含まれており、接続の両端が共通のモジュー ルを共有することが重要である。

moduliの生成とスクリーニングには、-O フラグを使用して多くのオプションを使用できる。

lines=number
DH候補のスクリーニングを行いながら、指定された行数のスクリーニングを行った後、終了する。
start-line=line-number
DH候補のスクリーニングを行いながら、指定された行番号からスクリーニングを開始する。
checkpoint=filename
DH候補のスクリーニング中に、最後に処理した行を指定されたファイルに書き込む。 これは、ジョブを再起動したときに、すでに処理された入力ファイルの行をスキップするために使用される。
memory=mbytes
DH-GEXの候補モジューリ生成時に使用するメモリ量(メガバイト単位)を指定する。
start=hex-value
DH-GEXの候補モジュールを生成する際の開始点(16進数)を指定する。
generator=value
DH-GEXの候補モジュールのテスト時に、希望するジェネレータを10進数で指定する。

CERTIFICATES

ssh-keygen は、ユーザまたはホストの認証に使用される証明書を作成するための鍵の署名に 対応している。証明書は、公開鍵、いくつかの ID 情報、0 個以上の主 (ユーザまたはホスト) 名、および認証局 (CA) の鍵によって署名された一連のオプションで構成される。 クライアントやサーバは、多くのユーザやホストの鍵を信頼するよりも、 認証局の鍵だけを信頼して、その署名を証明書で確認することができる。 OpenSSH の証明書は ssl(7) で使われている X.509 証明書とは異なる、より単純なフォーマットであることに 注意。

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

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

出来上がった証明書は、/path/to/user_key-cert.pub に格納される。 ホスト証明書は、-h オプションが必要である。

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

ホスト証明書は、/path/to/host_key-cert.pub に出力される。

PKCS#11 トークンに格納された CA 鍵を使用して署名することも可能である。その場合、トークン ライブラリを -D で提供し、CA 鍵のパブリックハーフを -s の引数として提供することでCA鍵を特定する。

          $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id user_key.pub

同様に、CA鍵はssh-agentの中でホストされることが可能である。 これは -U フラグで示され、やはり CA 鍵はそのパブリックハーフで識別されなければならない。

          $ ssh-keygen -Us ca_key.pub -I key_id user_key.pub

いずれの場合も、key_id は「鍵の識別子」であり、証明書が認証に使用された際にサーバーに記録される。

証明書は、一連のプリンシパル(ユーザー/ホスト)名に対して有効であるように制限することができる。 デフォルトでは、生成された証明書は、すべてのユーザーまたはホストに対して有効である。 指定されたプリンシパルのセットに対して証明書を生成するには、以下の手順に従う。

          $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub
          $ ssh-keygen -s ca_key -I key_id -h -n host.domain host_key.pub

ユーザー証明書の有効性と使用に関する追加の制限は、証明書オプションによって指定することができる。証明書オプションは、SSHセッションの機能を無効にしたり、特定の送信元アドレスから提示されたときのみ有効であったり、特定のコマンドの使用を強制したりすることができる。

ユーザー証明書に有効なオプションは次のとおり。

clear
有効なパーミッションをすべてクリアする。 これは、パーミッションのデフォルトセットをクリアして、パーミッションを個別に追加できるようにするのに便利である。
critical
name[=contents]
extension
name[=contents]
任意の証明書クリティカルオプションまたは拡張子を含む。 指定された名前は、"name@example.com"のようなドメインサフィックスを含む必要がある。 contents を指定した場合は、拡張子/オプションの内容を文字列としてエンコードしたものが含まれ、 そうでない場合は、拡張子/オプションは内容なし (通常はフラグを示す) で作成される。 拡張子は、それを認識しないクライアントやサーバーによって無視されるかもしれない。一方、未知の重要なオプションは、証明書が拒否される原因となる。
force-command=command
認証に証明書を使用する場合、ユーザーが指定したシェルやコマンドではなく、コマンドを強制的に実行させる。
no-agent-forwarding
ssh-agent のフォワーディングを無効にする (デフォルトで許可されている)。
no-port-forwarding
ポートフォワーディングを無効にする (デフォルトでは許可されている)。
no-pty
PTY割当を無効にする (デフォルトでは許可されている)。
no-user-rc
sshdによる ~/.ssh/rc の実行を無効にする (デフォルトでは許可されている)。
no-x11-forwarding
X11 フォワーディングを無効にする (デフォルトでは許可されている)。
permit-agent-forwarding
ssh-agent フォワーディングを許可する。
permit-port-forwarding
ポートフォワーディングを許可する。
permit-pty
PTY割当を許可する。
permit-user-rc
sshdによる ~/.ssh/rc の実行を許可する。
permit-X11-forwarding
X11 フォワーディングを許可する。
no-touch-required
この鍵を使用した署名に、ユーザーの存在を示すもの(例えば、ユーザーに認証器に触れてもらうなど)を含めることを要求しない。 このオプションは、FIDO認証アルゴリズムecdsa-skとed25519-skに対してのみ意味を持つ。
source-address=address_list
証明書が有効とみなされる送信元アドレスを制限する。 address_list は、CIDR 形式の 1 つ以上のアドレス/ネットマスクのペアをカンマで区切ったリストである。
verify-required
このキーを使って作られた署名を要求することで、ユーザーが最初に検証されたことを示す。 このオプションは、FIDO認証アルゴリズムecdsa-skとed25519-skに対してのみ意味を持つ。 現在、PIN認証のみがサポートされている検証方法であるが、将来的には他の方法もサポートされるかもしれない。

現時点では、ホスト鍵に対して有効な標準オプションはない。

最後に、証明書は有効期限を指定して定義することができる。 -V オプションにより、証明書の開始時刻と終了時刻を指定することができる。 この範囲外の時刻に提示された証明書は、有効とはみなされません。デフォルトでは、証明書はUNIXエポックから遠い未来まで有効である。

証明書をユーザまたはホストの認証に使用するには、CA 公開鍵が sshd または ssh によって信頼されている必要がある。 詳しくは,これらのマニュアルを参照すること。

KEY REVOCATION LISTS

ssh-keygen は OpenSSH 形式の Key Revocation Lists (KRL) を管理することができる。このバイナリファイルは、取り消す鍵や証明書をコンパクトな形式で指定するもので、シリアル番号で取り消す場合は、証明書ごとにわずか 1 ビットで済む。

KRL は、-k フラグを使用して生成することができる。このオプションは、コマンドラインから1つまたは複数のファイルを読み取り、新しいKRLを生成する。ファイルには、KRL 仕様(下記参照)または公開鍵が 1 行に 1 つずつ記載されている。平文の公開鍵は、KRLにハッシュまたは内容を記載することで失効させ、証明書はシリアル番号または鍵ID(シリアルが0または利用できない場合)で失効させることができる。

KRL仕様による鍵の失効は、鍵の失効に使用される記録の種類を明確に制御することができ、完全なオリジナルの証明書が手元になくても、シリアル番号または鍵IDによって証明書を直接失効させるために使用することができる。KRL仕様は、以下のディレクティブのいずれかと、コロン、およびディレクティブ固有の情報を含む行から構成される。

serial: serial_number[-serial_number]
指定されたシリアル番号の証明書を失効させる。 シリアル番号は、0を含まない64ビットの値で、10進数、16進数、または8進数で表現されることがある。 ハイフンで区切られた 2 つのシリアル番号を指定すると、それぞれを含むシリアル番号とその間のシリアル番号の範囲が失効される。 CA 鍵は、ssh-keygen コマンドラインで -s オプションを使用して指定されている必要がある。
id
key_id
指定された鍵 ID 文字列を持つ証明書を失効させる。 CA 鍵は、ssh-keygen コマンドラインで -s オプションを使用して指定されている必要がある。
key
public_key
指定された鍵を失効させる。 証明書が記載されている場合は、プレーンな公開鍵として失効される。
sha1
public_key
指定された鍵の SHA1 ハッシュを KRL に含めることによって、その鍵を失効させる。
sha256
public_key
指定された鍵の SHA256 ハッシュを KRL に含めることによって、その鍵を失効させる。 SHA256 ハッシュによってキーを取り消す KRL は、 OpenSSH の 7.9 より前のバージョンではサポートされていない。
hash
fingerprint
sshd 認証ログメッセージまたは ssh-keygen -l フラグから得られる指紋ハッシュを使用して、 鍵を失効させる。 ここでは SHA256 指紋のみがサポートされており、結果として得られる KRL は OpenSSH の 7.9 より前のバージョンではサポートされていない。

KRL は、-k に加えて -u フラグを使用して更新することができる。 このオプションが指定されると、コマンドライン経由でリストされた鍵が KRLにマージされ、すでに存在する鍵に追加される。

また、あるKRLが特定の鍵(または複数の鍵)を取り消すかどうかを調べることも可能である。 -Qフラグは、既存のKRLを照会し、コマンドラインで指定された各キーをテストする。 コマンドラインで指定された鍵が取り消された場合 (またはエラーが発生した場合)、 ssh-keygen は 0 以外の終了ステータスで終了する。 0 の終了ステータスは、取り消された鍵がない場合のみ返される。

ALLOWED SIGNERS

署名を検証する際、ssh-keygen は ID と鍵の簡単な一覧を使用して、署名が許可されたソースから のものかどうかを判断する。 この「許可された署名者」ファイルでは、 sshd で説明されている AUTHORIZED_KEYS FILE FORMAT に倣った形式が使用されている。 ファイルの各行には、スペースで区切られた次のフィールドが含まれる:

Principals、Options、Keytype、Base64 エンコードされた鍵。 空白行と '#' で始まる行はコメントとして無視される。

principals フィールドは、署名に使用できる 1 つ以上のカンマ区切りの USER@DOMAIN ID パターンで構成されるパターンリスト (ssh_config の PATTERNS を参照)です。 検証の際、対応する鍵が検証用として受け入れられるためには、-I オプションで提示された ID がプリンシパルパターンに一致する必要がある。

オプションは (存在する場合)、カンマで区切られたオプション指定で構成される。 二重引用符で囲む場合を除き、空白文字は許されない。 以下のオプション指定が可能である(オプションキーワードは大文字小文字を区別しないことに 注意)。

cert-authority
この鍵が認証局(CA)として認められ、この認証局によって署名された証明書が検証のために受 け入れられることを示す。
namespaces="namespace-list"
このキーで受け入れられるネームスペースのパターン・リストを指定する。 このオプションがある場合、署名オブジェクトに埋め込まれ、検証コマンドラインに表示される署名の名前空間は、鍵が許容されるとみなされる前に、指定されたリストと一致する必要がある。
証明書による署名を検証する場合、予想されるプリンシパル名は、許可される署名者ファイル内のプリンシパルと、証明書自体に埋め込まれたプリンシパルの両方に一致する必要がある。
許可された署名者ファイルの例:
       # Comments allowed at start of line
       user1@example.com,user2@example.com ssh-rsa AAAAX1...
       # A certificate authority, trusted for all principals in a domain.
       *@example.com cert-authority ssh-ed25519 AAAB4...
       # A key that is accepted only for file signing.
       user2@example.com namespaces="file" ssh-ed25519 AAA41...

ENVIRONMENT

SSH_SK_PROVIDER
FIDO認証ホスト鍵を読み込む際に使用するライブラリへのパスを指定し、内蔵のUSB HIDサポートを使用するデフォルトをオーバーライドする。

FILES

~/.ssh/id_dsa
~/.ssh/id_ecdsa
~/.ssh/id_ecdsa_sk
~/.ssh/id_ed25519
~/.ssh/id_ed25519_sk
~/.ssh/id_rsa
ユーザのDSA、ECDSA、authenticator-hosted ECDSA、Ed25519、authenticator-hosted Ed25519、RSA認証IDが格納されている。 このファイルは、ユーザー以外が読めないようにする必要がある。 鍵の生成時にパスフレーズを指定することができる。このパスフレーズは、このファイルのプライベートな部分を128ビットAESで暗号化するために使用される。 このファイルは ssh-keygen によって自動的にアクセスされるわけではないが、秘密鍵のための デフォルトファイルとして提供される。
~/.ssh/id_dsa.pub
~/.ssh/id_ecdsa.pub
~/.ssh/id_ecdsa_sk.pub
~/.ssh/id_ed25519.pub
~/.ssh/id_ed25519_sk.pub
~/.ssh/id_rsa.pub
認証用の DSA、ECDSA、認証ホスト付き ECDSA、Ed25519、認証ホスト付き Ed25519 または RSA 公開鍵が含まれる。 このファイルの内容は、ユーザが公開鍵認証を使用してログインするすべてのマシンの ~/.ssh/authorized_keys に追加される必要がある。 このファイルの内容を秘密にしておく必要はない。
/etc/ssh/moduli
DH-GEX で使用される Diffie-Hellman グループが格納されている。 ファイルのフォーマットは /etc/ssh/moduli で説明されている。

SEE ALSO

ssh, ssh-add, ssh-agent, moduli, sshd

The Secure Shell (SSH) Public Key File Format, RFC4716, 2006.

AUTHORS

OpenSSH is a derivative of the original and free ssh 1.2.12 release by Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt and Dug Song removed many bugs, re-added newer features and created OpenSSH. Markus Friedl contributed the support for SSH protocol versions 1.5 and 2.0.

External Link