「ssh-keygen」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の4版が非表示)
行1: 行1:
<!--
+
[[ssh-keygen]] とは、[[ssh]] の認証鍵の生成、管理、変換をするためのコマンドです。[[Secure Shell]] の利点の1つである[[公開鍵認証]]を使うために、[[鍵ペア]] が必要です。[[ssh-agent]] を利用することで、さらに利便性が向上します。RSA, DSA, ECDSA であれば、RSA の鍵を作成してください。
vim: filetype=mediawiki
+
-->
+
[[{{PAGENAME}}]] とは、[[ssh]] の認証鍵の生成、管理、変換をするためのコマンドです。
+
[[Secure Shell]] の利点の1つである[[公開鍵認証]]を使うために、[[鍵ペア]] が必要です。
+
[[ssh-agent]] を利用することで、さらに利便性が向上します。
+
  
 
'''読み方'''
 
'''読み方'''
;[[{{PAGENAME}}]]: えすえすえいち きーじぇん
+
;[[ssh-keygen]]: えすえすえいち きーじぇん
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 
+
[[ssh-keygen]] とは、[[ssh]] の認証鍵の生成、管理、変換をするためのコマンドです。
[[{{PAGENAME}}]] とは、[[ssh]] の認証鍵の生成、管理、変換をするためのコマンドです。
+
 
[[Secure Shell]] の利点の1つである[[公開鍵認証]]を使うために、[[鍵ペア]] が必要です。
 
[[Secure Shell]] の利点の1つである[[公開鍵認証]]を使うために、[[鍵ペア]] が必要です。
 
[[ssh-agent]] を利用することで、さらに利便性が向上します。
 
[[ssh-agent]] を利用することで、さらに利便性が向上します。
  
[[RSA暗号|RSA]]鍵は、 2048bit の鍵で十分だと考えられています。
+
[[RSA暗号|RSA]]鍵は、[[鍵長]]が 2048bit の鍵で十分だと考えられています。
  
[[ssh-kengen]] で作成した[[公開鍵]] ( *.pub ) は、[[authorized_keys]] に登録します。
+
[[ssh-keygen]] で作成した[[公開鍵]] ( *.pub ) は、[[authorized_keys]] に登録します。
 
[[公開鍵]] ごとにアクセス元や実行できるコマンド、pty を使わせるか、などを設定できます。
 
[[公開鍵]] ごとにアクセス元や実行できるコマンド、pty を使わせるか、などを設定できます。
  
行34: 行28:
 
|-
 
|-
 
| SSH 2
 
| SSH 2
| [[DSA暗号|dsa]]
+
| [[Digital Signature Algorithm|dsa]]
 
| id_dsa
 
| id_dsa
 
| id_dsa.pub
 
| id_dsa.pub
行43: 行37:
 
| identity.pub
 
| identity.pub
 
|}
 
|}
 
 
== インストール ==
 
== インストール ==
 
 
[[ssh-keygen]] は、 [[ssh]] のパッケージに含まれています。
 
[[ssh-keygen]] は、 [[ssh]] のパッケージに含まれています。
  
== 書式 ==
+
FreeBSD であれば、openssh-portable をインストールします。
 +
{{pkg|openssh-portable}}
  
 +
== 書式 ==
 +
=== openssh-portable-6.6.p1_4,1 ===
 +
openssh-portable-6.6.p1_4,1のパッケージのssh-keygenのコマンドラインオプションです。
 +
<syntaxhighlight lang="bash">
 +
usage: ssh-keygen [options]
 +
Options:
 +
  -A          Generate non-existent host keys for all key types.
 +
  -a number  Number of KDF rounds for new key format or moduli primality tests.
 +
  -B          Show bubblebabble digest of key file.
 +
  -b bits    Number of bits in the key to create.
 +
  -C comment  Provide new comment.
 +
  -c          Change comment in private and public key files.
 +
  -D pkcs11  Download public key from pkcs11 token.
 +
  -e          Export OpenSSH to foreign format key file.
 +
  -F hostname Find hostname in known hosts file.
 +
  -f filename Filename of the key file.
 +
  -G file    Generate candidates for DH-GEX moduli.
 +
  -g          Use generic DNS resource record format.
 +
  -H          Hash names in known_hosts file.
 +
  -h          Generate host certificate instead of a user certificate.
 +
  -I key_id  Key identifier to include in certificate.
 +
  -i          Import foreign format to OpenSSH key file.
 +
  -J number  Screen this number of moduli lines.
 +
  -j number  Start screening moduli at specified line.
 +
  -K checkpt  Write checkpoints to this file.
 +
  -k          Generate a KRL file.
 +
  -L          Print the contents of a certificate.
 +
  -l          Show fingerprint of key file.
 +
  -M memory  Amount of memory (MB) to use for generating DH-GEX moduli.
 +
  -m key_fmt  Conversion format for -e/-i (PEM|PKCS8|RFC4716).
 +
  -N phrase  Provide new passphrase.
 +
  -n name,... User/host principal names to include in certificate
 +
  -O option  Specify a certificate option.
 +
  -o          Enforce new private key format.
 +
  -P phrase  Provide old passphrase.
 +
  -p          Change passphrase of private key file.
 +
  -Q          Test whether key(s) are revoked in KRL.
 +
  -q          Quiet.
 +
  -R hostname Remove host from known_hosts file.
 +
  -r hostname Print DNS resource record.
 +
  -S start    Start point (hex) for generating DH-GEX moduli.
 +
  -s ca_key  Certify keys with CA key.
 +
  -T file    Screen candidates for DH-GEX moduli.
 +
  -t type    Specify type of key to create.
 +
  -u          Update KRL rather than creating a new one.
 +
  -V from:to  Specify certificate validity interval.
 +
  -v          Verbose.
 +
  -W gen      Generator to use for generating DH-GEX moduli.
 +
  -y          Read private key file and print public key.
 +
  -Z cipher  Specify a cipher for new private key format.
 +
  -z serial  Specify a serial number.
 +
</syntaxhighlight>
 +
=== FreeBSD 10.0-RELEASE の ssh-keygen ===
 +
FreeBSD 10.0-RELEASE に付属している ssh-keygen のオプションです。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
 
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
行72: 行119:
 
     ssh-keygen -L [-f input_keyfile]
 
     ssh-keygen -L [-f input_keyfile]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 鍵のタイプ ==
 +
作成する[[鍵]]のタイプは、いくつかのアルゴリズムから選択できます。
 +
 +
環境(sshパッケージのバージョン)によって、使えるアルゴリズムが異なります。
 +
古い環境ならDSAやRSAしか使用できないかもしれません。
 +
 +
SSHプロトコルバージョン1では、[[RSA|RSA暗号]]の[[鍵]]を使用できます。
 +
SSHプロトコルバージョン2では、[[DSA]], [[ECDSA]], [[Ed25519]], [[RSA|RSA暗号]] の鍵が使用できます。
 +
 +
[[Ed25519]]は、[[OpenSSH]] 6.5 からサポートされました。
 +
== 楕円曲線暗号 ECDSA には512ビットの鍵長は存在しない ==
 +
[[ECDSA]]の鍵では、[[鍵長]]は、256, 384, 521 ビットです。
 +
 +
楕円曲線暗号の要件で、それぞれのビット長である楕円曲線が出てくるべきだが、それが満たせないので、512ビットの変わりに521ビットを使う、とされています。
  
 
== 使い方 ==
 
== 使い方 ==
 
 
=== RSAの鍵ペアの作成 ===
 
=== RSAの鍵ペアの作成 ===
 
 
[[鍵ペア]] の作成は、下記の通りです。
 
[[鍵ペア]] の作成は、下記の通りです。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ssh-keygen -b 4096 -t rsa -f ~/.ssh/id_rsa.`date '+%Y-%m-%d'` -N '' -C "$USER-`date '+%Y-%m-%d'`"
 
ssh-keygen -b 4096 -t rsa -f ~/.ssh/id_rsa.`date '+%Y-%m-%d'` -N '' -C "$USER-`date '+%Y-%m-%d'`"
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== パスフレーズなしの秘密鍵の作成 ===
 
=== パスフレーズなしの秘密鍵の作成 ===
 
+
アプリケーションアカウント で実行する [[cron]] (バッチ) で [[ssh]] を使う場合には、[[パスフレーズ]]のない[[秘密鍵]] を利用すると、環境構築は、楽になります。
[[アプリケーションアカウント]] で実行する [[cron]] (バッチ) で [[ssh]] を使う場合には、[[パスフレーズ]]のない[[秘密鍵]] を利用すると、環境構築は、楽になります。
+
 
その代わり、セキュリティは低下します。
 
その代わり、セキュリティは低下します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行90: 行148:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[ログインシェル]] に [[rbash]] や [[scponly]] を利用して、実行できるコマンドを制限したり、[[authorized_keys]] でコマンドやアクセス元などの制限を行うべきです。
+
ログインシェル に [[rbash]] や [[scponly]] を利用して、実行できるコマンドを制限したり、[[authorized_keys]] でコマンドやアクセス元などの制限を行うべきです。
  
 
詳しくは、[[パスフレーズのないsshの秘密鍵の作成]]をご参照ください。
 
詳しくは、[[パスフレーズのないsshの秘密鍵の作成]]をご参照ください。
 
 
=== パスフレーズを変更する ===
 
=== パスフレーズを変更する ===
 
 
古い[[パスフレーズ]] foo から 新しい [[パスフレーズ]] bar に変更する例です。
 
古い[[パスフレーズ]] foo から 新しい [[パスフレーズ]] bar に変更する例です。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ssh-keygen -p foo -N bar -f ~/.ssh/id_rsa
 
ssh-keygen -p foo -N bar -f ~/.ssh/id_rsa
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== known_hostsファイルからホストを削除する ===
 
=== known_hostsファイルからホストを削除する ===
 
 
[[ssh-keygen]]コマンドを使って、[[sshd]]のホストキーを[[known_hosts]]から削除できます。 foo.local のキーを削除したい場合は、下記の通りです。
 
[[ssh-keygen]]コマンドを使って、[[sshd]]のホストキーを[[known_hosts]]から削除できます。 foo.local のキーを削除したい場合は、下記の通りです。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行114: 行168:
 
Original contents retained as /home/foo/.ssh/known_hosts.old
 
Original contents retained as /home/foo/.ssh/known_hosts.old
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
 
== Windows を利用している場合 ==
 
== Windows を利用している場合 ==
 
+
[[Windows]] で [[PuTTY]] を利用している場合は、 '''PuTTYgen''' で [[鍵ペア]] を作成できます。 '''PuTTYgen''' は、[[PuTTY]] 形式の[[秘密鍵]]と [[OpenSSH]] 形式の[[秘密鍵]] を相互に変換できます。
[[Windows]] で [[PuTTY]] を利用している場合は、 [[PuTTYgen]] で [[鍵ペア]] を作成できます。 [[PuTTYgen]] は、[[PuTTY]] 形式の[[秘密鍵]]と [[OpenSSH]] 形式の[[秘密鍵]] を相互に変換できます。
+
 
+
 
== 関連項目 ==
 
== 関連項目 ==
 
 
* [[パスフレーズ]]
 
* [[パスフレーズ]]
 
* [[ssh-agent]]
 
* [[ssh-agent]]
行127: 行176:
 
* [[ssh]]
 
* [[ssh]]
 
* [[Secure Shell]]
 
* [[Secure Shell]]
* [[PuTTYgen]]
+
* '''PuTTYgen'''
 +
* [[鍵長]]
 +
<!-- vim: filetype=mediawiki
 +
-->

2015年9月23日 (水) 17:24時点における最新版

ssh-keygen とは、ssh の認証鍵の生成、管理、変換をするためのコマンドです。Secure Shell の利点の1つである公開鍵認証を使うために、鍵ペア が必要です。ssh-agent を利用することで、さらに利便性が向上します。RSA, DSA, ECDSA であれば、RSA の鍵を作成してください。

読み方

ssh-keygen
えすえすえいち きーじぇん

概要

ssh-keygen とは、ssh の認証鍵の生成、管理、変換をするためのコマンドです。 Secure Shell の利点の1つである公開鍵認証を使うために、鍵ペア が必要です。 ssh-agent を利用することで、さらに利便性が向上します。

RSA鍵は、鍵長が 2048bit の鍵で十分だと考えられています。

ssh-keygen で作成した公開鍵 ( *.pub ) は、authorized_keys に登録します。 公開鍵 ごとにアクセス元や実行できるコマンド、pty を使わせるか、などを設定できます。

SSH のプロトコルと暗号と鍵ペアのファイル名
プロトコルバージョン 暗号 デフォルトの秘密鍵ファイル名 デフォルトの公開鍵ファイル名
SSH 2 rsa id_rsa id_rsa.pub
SSH 2 dsa id_dsa id_dsa.pub
SSH 1 rsa1 identity identity.pub

インストール

ssh-keygen は、 ssh のパッケージに含まれています。

FreeBSD であれば、openssh-portable をインストールします。

FreeBSDにインストールする場合

pkgコマンドでインストールする場合

sudo pkg install openssh-portable

書式

openssh-portable-6.6.p1_4,1

openssh-portable-6.6.p1_4,1のパッケージのssh-keygenのコマンドラインオプションです。

usage: ssh-keygen [options]
Options:
  -A          Generate non-existent host keys for all key types.
  -a number   Number of KDF rounds for new key format or moduli primality tests.
  -B          Show bubblebabble digest of key file.
  -b bits     Number of bits in the key to create.
  -C comment  Provide new comment.
  -c          Change comment in private and public key files.
  -D pkcs11   Download public key from pkcs11 token.
  -e          Export OpenSSH to foreign format key file.
  -F hostname Find hostname in known hosts file.
  -f filename Filename of the key file.
  -G file     Generate candidates for DH-GEX moduli.
  -g          Use generic DNS resource record format.
  -H          Hash names in known_hosts file.
  -h          Generate host certificate instead of a user certificate.
  -I key_id   Key identifier to include in certificate.
  -i          Import foreign format to OpenSSH key file.
  -J number   Screen this number of moduli lines.
  -j number   Start screening moduli at specified line.
  -K checkpt  Write checkpoints to this file.
  -k          Generate a KRL file.
  -L          Print the contents of a certificate.
  -l          Show fingerprint of key file.
  -M memory   Amount of memory (MB) to use for generating DH-GEX moduli.
  -m key_fmt  Conversion format for -e/-i (PEM|PKCS8|RFC4716).
  -N phrase   Provide new passphrase.
  -n name,... User/host principal names to include in certificate
  -O option   Specify a certificate option.
  -o          Enforce new private key format.
  -P phrase   Provide old passphrase.
  -p          Change passphrase of private key file.
  -Q          Test whether key(s) are revoked in KRL.
  -q          Quiet.
  -R hostname Remove host from known_hosts file.
  -r hostname Print DNS resource record.
  -S start    Start point (hex) for generating DH-GEX moduli.
  -s ca_key   Certify keys with CA key.
  -T file     Screen candidates for DH-GEX moduli.
  -t type     Specify type of key to create.
  -u          Update KRL rather than creating a new one.
  -V from:to  Specify certificate validity interval.
  -v          Verbose.
  -W gen      Generator to use for generating DH-GEX moduli.
  -y          Read private key file and print public key.
  -Z cipher   Specify a cipher for new private key format.
  -z serial   Specify a serial number.

FreeBSD 10.0-RELEASE の ssh-keygen

FreeBSD 10.0-RELEASE に付属している ssh-keygen のオプションです。

     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
                [-f output_keyfile]
     ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
     ssh-keygen -i [-m key_format] [-f input_keyfile]
     ssh-keygen -e [-m key_format] [-f input_keyfile]
     ssh-keygen -y [-f input_keyfile]
     ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
     ssh-keygen -l [-f input_keyfile]
     ssh-keygen -B [-f input_keyfile]
     ssh-keygen -D pkcs11
     ssh-keygen -F hostname [-f known_hosts_file] [-l]
     ssh-keygen -H [-f known_hosts_file]
     ssh-keygen -R hostname [-f known_hosts_file]
     ssh-keygen -r hostname [-f input_keyfile] [-g]
     ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
     ssh-keygen -T output_file -f input_file [-v] [-a num_trials]
                [-W generator]
     ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals]
                [-O option] [-V validity_interval] [-z serial_number] file ...
     ssh-keygen -L [-f input_keyfile]

鍵のタイプ

作成するのタイプは、いくつかのアルゴリズムから選択できます。

環境(sshパッケージのバージョン)によって、使えるアルゴリズムが異なります。 古い環境ならDSAやRSAしか使用できないかもしれません。

SSHプロトコルバージョン1では、RSA暗号を使用できます。 SSHプロトコルバージョン2では、DSA, ECDSA, Ed25519, RSA暗号 の鍵が使用できます。

Ed25519は、OpenSSH 6.5 からサポートされました。

楕円曲線暗号 ECDSA には512ビットの鍵長は存在しない

ECDSAの鍵では、鍵長は、256, 384, 521 ビットです。

楕円曲線暗号の要件で、それぞれのビット長である楕円曲線が出てくるべきだが、それが満たせないので、512ビットの変わりに521ビットを使う、とされています。

使い方

RSAの鍵ペアの作成

鍵ペア の作成は、下記の通りです。

ssh-keygen -b 4096 -t rsa -f ~/.ssh/id_rsa.`date '+%Y-%m-%d'` -N '' -C "$USER-`date '+%Y-%m-%d'`"

パスフレーズなしの秘密鍵の作成

アプリケーションアカウント で実行する cron (バッチ) で ssh を使う場合には、パスフレーズのない秘密鍵 を利用すると、環境構築は、楽になります。 その代わり、セキュリティは低下します。

ssh-keygen -b 4096 -t rsa -f ~/.ssh/id_rsa.nopass -N '' -C "$USER-`date '+%Y-%m-%d'`"

ログインシェル に rbashscponly を利用して、実行できるコマンドを制限したり、authorized_keys でコマンドやアクセス元などの制限を行うべきです。

詳しくは、パスフレーズのないsshの秘密鍵の作成をご参照ください。

パスフレーズを変更する

古いパスフレーズ foo から 新しい パスフレーズ bar に変更する例です。

ssh-keygen -p foo -N bar -f ~/.ssh/id_rsa

known_hostsファイルからホストを削除する

ssh-keygenコマンドを使って、sshdのホストキーをknown_hostsから削除できます。 foo.local のキーを削除したい場合は、下記の通りです。

ssh-keygen -R foo.local

下記は、実行例です。

%ssh-keygen -R foo.local
/home/foo/.ssh/known_hosts updated.
Original contents retained as /home/foo/.ssh/known_hosts.old

Windows を利用している場合

WindowsPuTTY を利用している場合は、 PuTTYgen鍵ペア を作成できます。 PuTTYgen は、PuTTY 形式の秘密鍵OpenSSH 形式の秘密鍵 を相互に変換できます。

関連項目