記事一覧へ戻る

ssh-keygen SSHの鍵ペア作成に関するメモ

Kinya Fujimoto Kinya Fujimoto
2021年12月16日 この記事はおよそ2分で読めます

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
この記事をシェアする
ssh-keygen