ssh-keygen SSHの鍵ペア作成に関するメモ
ssh-keygenコマンドについて
SSH(Secure SHell)用の公開鍵と秘密鍵のペアを生成するコマンド。他に、CA(Certificate Authority)鍵を使った証明書ファイルを生成する機能もある。
鍵ペアの生成
DSA,ECDSA,Ed25519,RSA,RSA1等の形式で鍵ペアを生成することが可能。ここでは、よく利用されるRSA暗号の鍵ペア生成の場合について主に記載する。
RSA暗号の鍵ペア生成
-tオプションで rsaを指定してssh-keygenコマンドを実行する。
- ★1 生成する鍵のディレクトリ・ファイル名を聞かれるので、( )内に表示されているデフォルトのままで良ければ、そのままEnter。変更する場合は、所望のディレクトリ・ファイル名を入力する。
- ★2 パスフレーズを入力。確認用に、再度入力。セキュリティ的には、入力したほうが良いが、何も入力せずにEnterを押して空にすることも可能。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): ★1
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): ★2
Enter same passphrase again: ★2
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:ThisIsSAMPLE1234567890123456789012345678901 user@host
The key's randomart image is:
+---[RSA 3072]----+
| ,, _ |
| / ` 、 |
|/ (_ノL_) ヽ|
|/ ´՞ ՞` l|
| し |
|l ਊ l|
|> 、 _ ィ|
| /  ̄ ヽ|
| | i |
+----[SHA256]-----+
生成された鍵ペアの確認。id_rsaが秘密鍵、id_rsa.pubが公開鍵。
$ ls -la ~/.ssh
total 16
drwx------ 2 user group 4096 Dec 15 16:31 .
drwxr-xr-x 16 user group 4096 Dec 15 16:30 ..
-rw------- 1 user group 2610 Dec 15 16:31 id_rsa
-rw-r--r-- 1 user group 574 Dec 15 16:31 id_rsa.pub
id_rsaのパーミッションが合っていない場合、SSH接続で次のようなエラーが発生することがある。
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
Permissions 0777 for '~/.ssh/id_rsa' are too open.
この場合、以下のコマンドでパーミッションを修正しておく。
$ chmod 600 ~/.ssh/id_rsa
生成されたid_rsa.pubの中身を見てみる。末尾に、ユーザー名とホスト名が記載されている。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa XXXXX(省略)XXXXX user@host
クライアント様へ渡す必要があるような場合など、ユーザ名やホスト名の記載を出したくない場合は、 -Cオプションで空文字列("")やe-mailアドレス("youremail@example.com")等をコメント指定すれば置換できる。
$ ssh-keygen -t rsa -C ""
-Cオプションで空文字列を指定した場合に生成されるid_rsa.pubの中身はこんな感じ。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa XXXXX(省略)XXXXX
パスフレーズの変更
パスフレーズを変更する場合は、-pオプションをつけてssh-keygenコマンドを実行する。 以下の例では、-fオプションで対象ファイルも指定している。
- ★1 古いパスフレーズを入力。
- ★2 新しいパスフレーズを入力。確認用に、再度入力。
$ ssh-keygen -p -f ~/.ssh/id_rsa
Enter old passphrase: ★1
Key has comment 'user@host'
Enter new passphrase (empty for no passphrase): ★2
Enter same passphrase again: ★2
Your identification has been saved with the new passphrase.
known_hostsに登録されたサーバー情報の削除
初めてSSH接続すると、接続先サーバーの公開鍵を含む情報が、~/.ssh/known_hostsに登録される。 なんらかの事情で削除が必要になった場合は、-Rオプションをつけてssh-keygenコマンドを実行する。
$ ssh-keygen -R server_hostname
# Host server_hostname found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
フィンガープリントの確認
初めてSSH接続する際などに表示されるサーバーのフィンガープリントを確認するには サーバー側のシェルで、以下のようなコマンドを実行する。
$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:HogeFugaHogeFugaHogeFugaHogeFugaHogeFugaHog no comment (ECDSA)
PEM形式への変換
ssh-keygenで生成されるid_rsa.pubはOpenSSHの独自形式のファイルになっている。 あまり必要なシーンは無いと思われるが、以下のコマンドでPEM形式に変換できる。
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem
ECDSA形式の鍵ペア生成
ECDSA形式の鍵ペア生成コマンド
ssh-keygen -t ecdsa
Ed25519形式の鍵ペア生成
Ed25519形式の鍵ペア生成コマンド
ssh-keygen -t ed25519