ssh-keygenコマンドの使い方
1 ssh-keygenコマンドとは?
SSHの秘密鍵,公開鍵のキーペアを作成するコマンドです。
2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@server ~]# uname -r
3.10.0-957.el7.x86_64
[root@server ~]# rpm -qf /usr/bin/ssh-keygen
openssh-7.4p1-16.el7.x86_64
3 オプション一覧
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-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 [-v] [-E fingerprint_hash] [-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 rounds] [-J num_lines]
[-j start_line] [-K checkpt] [-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-keygen -A
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
file ...
ssh-keygen -Q -f krl_file file ...
4 キーペアの作成方法(-t)
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-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 [-v] [-E fingerprint_hash] [-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 rounds] [-J num_lines]
[-j start_line] [-K checkpt] [-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-keygen -A
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
file ...
ssh-keygen -Q -f krl_file file ...
manによると、作成できるキーペアは、以下の5つあることがわかります。
dsa
,ecdsa
,ed25519
,rsa
,rsa1
デフォルトで作成するキーペアはrsaです。
作成するキーペアを明に指定したい場合は、-t
オプションを使います。
[root@server ~]# man ssh-keygen
-snip-
ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
4.1 ecdsaキーペアの作成方法
ecdsaキーペアを作成してみます。
Enter
キーを入力して、キーペアの作成場所(★1)はデフォルト(~/.ssh
)、
パスフレーズ(★2)は設定しませんでした。
なお、パスフレーズは、他人に秘密鍵を解読されないようにするためのものです。
[root@server ~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa): ★1
Enter passphrase (empty for no passphrase): ★2
Enter same passphrase again: ★2
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:dDO6/a7kvpr7gE2c0kzsKhVWhUWtlj7ozskw+xuZ2Jw root@server
The key's randomart image is:
+---[ECDSA 256]---+
| .=+. |
| o. . |
| o + +o |
| . O ++o |
| o S+ |
| . X.*o |
| . *.E o. |
| . *.B . |
| .o@**+o |
+----[SHA256]-----+
作成したecdsaのキーペアを確認します。
秘密鍵(id_ecdsa
)と公開鍵(id_ecdsa.pub
)が作成されたことがわかります。
[root@server ~]# ls -l ~/.ssh/id_ecdsa*
-rw-------. 1 root root 227 2月 8 20:18 /root/.ssh/id_ecdsa
-rw-r--r--. 1 root root 173 2月 8 20:18 /root/.ssh/id_ecdsa.pub
4.2 ed25519キーペアの作成方法
4.1
と同様な手順で、ed25519キーペアを作成してみます。
[root@server ~]# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:3r+5XkERSXv8S7AUzBGgOgsC2SwBJAglWmd2TLSv+ZY root@server
The key's randomart image is:
+--[ED25519 256]--+
|X+o +++ .+=*o |
|+o=+ ... . oo+ |
|.+ o . . oo o|
| o .. ..o..|
| . . oS ....|
| . .+o. ...|
| o.... .. |
| .E . o |
| .. .*o |
+----[SHA256]-----+
作成したed25519のキーペアを確認します。
秘密鍵(id_ed25519
)と公開鍵(id_ed25519.pub
)が作成されたことがわかります。
[root@server ~]# ls -l ~/.ssh/id_ed25519*
-rw-------. 1 root root 399 2月 8 20:39 /root/.ssh/id_ed25519
-rw-r--r--. 1 root root 93 2月 8 20:39 /root/.ssh/id_ed25519.pub
5 秘密鍵にパスフレーズが設定されているかどうかの確認方法(-y)
-y
オプションを使うと、秘密鍵から公開鍵を求めることができます。
以下は、manの抜粋です。
-y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout.
まず、パスフレーズが設定されていない場合について確認してみます。
-f
オプションを使って、ecdsaの秘密鍵を指定すると、公開鍵が出力されます。
つまり、この場合、秘密鍵にパスフレーズが設定されていないことになります。
[root@server ~]# ssh-keygen -y -f ~/.ssh/id_ecdsa
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAP4rns2rqz2+novhHOQpgf3CeHuxN3zfGonmg52+aMYtsyNzGA/FGTPtz+l5OBPomaFU7ahKZI/QQB4Kqro8Fo=
次に、パスフレーズを設定した場合について確認してみます。
-f
オプションを使って、ecdsaの秘密鍵を指定すると、パスフレーズの入力を求められます。
つまり、この場合、秘密鍵にパスフレーズが設定されていることになります。
[root@server ~]# ssh-keygen -y -f ~/.ssh/id_ecdsa
Enter passphrase:
6 秘密鍵に設定されたパスフレーズの変更方法(-p)
秘密鍵に設定されたパスフレーズの変更方法について説明します。
-N
オプションでパスフレーズ指定、-f
オプションで秘密鍵のファイル名を指定します。
ここでは、パスフレーズとしてtesttest
を指定しました。
[root@server ~]# ssh-keygen -q -t ecdsa -N testtest -f /root/.ssh/id_ecdsa
[root@server ~]# ls -l ~/.ssh/id_ecdsa*
-rw-------. 1 root root 314 2月 8 21:33 /root/.ssh/id_ecdsa
-rw-r--r--. 1 root root 173 2月 8 21:33 /root/.ssh/id_ecdsa.pub
ここで、古いパスフレーズから新しいパスフレーズに変更してみます。
[root@server ~]# ssh-keygen -p -f ~/.ssh/id_ecdsa
Enter old passphrase: ★古いパスフレーズ入力
Enter new passphrase (empty for no passphrase): ★新しいパスフレーズ入力
Enter same passphrase again: ★新しいパスフレーズを再度入力
Your identification has been saved with the new passphrase.
7 フィンガープリントを表示する方法(-l)
フィンガープリントとは、公開鍵をハッシュ関数でハッシュした値です。
以下の環境で、クライアントでサーバのフィンガープリントを確認してみます。
192.168.3.0/24
client --------------------------------------- server
.20 .10
クライアント側でknown_hostsの中身を確認します。
まだ、サーバと接続をしていないので、known_hostsの中身は空です。
[root@client ~]# cat /root/.ssh/known_hosts
[root@client ~]#
クライアントからサーバにログインすると、フィンガープリントが表示されます。
フィンガープリントは、はじめて接続したときに表示されます。
以下のフィンガープリントは、ECDSAの公開鍵が、それぞれSHA256,MD5でハッシュされた値です。
[root@client ~]# ssh [email protected]
The authenticity of host '192.168.3.10 (192.168.3.10)' can't be established.
ECDSA key fingerprint is SHA256:84oUTBiPbjzH9qAOSl3FYrkJX8tgN+kL6pDXAA9RiI4.
ECDSA key fingerprint is MD5:f1:ab:cf:88:25:2a:8a:11:84:0b:66:2e:13:6b:62:fa.
-以下、略-
次に、サーバのキーペアを確認します。
サーバのキーペアは/etc/ssh/
配下に格納されています。
ECDSAの秘密鍵はssh_host_ecdsa_key
、公開鍵はssh_host_ecdsa_key.pub
になります。
[root@server ~]# ls -l /etc/ssh/ssh_host_*
-rw-r-----. 1 root ssh_keys 227 2月 2 09:34 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root 162 2月 2 09:34 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 387 2月 2 09:34 /etc/ssh/ssh_host_ed25519_key
-rw-r--r--. 1 root root 82 2月 2 09:34 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1675 2月 2 09:34 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root 382 2月 2 09:34 /etc/ssh/ssh_host_rsa_key.pub
ssh-keygenコマンドを使って、サーバの公開鍵のハッシュ値を求めてみます。
サーバにログインしたときに表示されたハッシュ値と一致することがわかります。
つまり、意図したサーバにsshでログインしていることがわかります。
[root@server ~]# ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key
256 SHA256:84oUTBiPbjzH9qAOSl3FYrkJX8tgN+kL6pDXAA9RiI4 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
8 known_hostsファイルから公開鍵を削除する方法(-R)
known_hostsファイルを確認する。
サーバのホスト名(kvm),IPアドレス,公開鍵が登録されていることがわかります。
[root@server ~]# cat ~/.ssh/known_hosts
web,192.168.3.30 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDVJMbQ7SzaNaEDrSUR8ZMhF3uqnkdu8UjmpP/S0u3LWC3y2VxiPOfTMGbc9CW08MHKbc4RqpAnuGmPqFFfkbP8=
known_hostsファイルから、webの情報(ホスト名、IPアドレス、公開鍵)を削除します。
[root@server ~]# ssh-keygen -R web
# Host web found: line 1
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
known_hostsファイルから、webの情報が削除されたことがわかります。
[root@server ~]# cat ~/.ssh/known_hosts
[root@server ~]#
9 フォーマットを変換する方法
-m
で指定できるオプションは、RFC4716
,PKCS8
,PEM
の3つあります。
-m key_format
Specify a key format for the -i (import) or -e (export) conversion options. The supported key formats are: “RFC4716” (RFC 4716/SSH2 public or
private key), “PKCS8” (PEM PKCS8 public key) or “PEM” (PEM public key). The default conversion format is “RFC4716”.
[root@server ~]# ssh-keygen -f ~/.ssh/id_rsa.pub -e -m RFC4716
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by root@server from OpenSSH"
AAAAB3NzaC1yc2EAAAADAQABAAABAQCroC5FNIztvhxVfA+PbF7X0e6MohgF4L+m5pkOi7
fZhbZu0abxOVdqX3GsvMutnby1aE1ZoJAIApWRVtjaphSiv18Quzwpg96o6e5c2fvrs1bf
AK4czj1jZGl2f4Dz5SsYjgVOMEHzgDKOeLijifB54ZTNlmMUaXEVVvR/NGaGn5TGqSihgh
9Zd01HhPSHun25SFT7/dNGSxe8Lm1gp1niRywUpneW7zmkIaH5fQ2Y580SGJXBN2OiAFXg
GjS3j6Qoc7jpyFogIzVb5no5uU7aIgZXdO3N32BRSqdo2tVA7f5UluUaXjif07KXHSrlV7
YuYLW4sdOjALtBIuUUNtuX
---- END SSH2 PUBLIC KEY ----
[root@server ~]# ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq6AuRTSM7b4cVXwPj2xe
19HujKIYBeC/puaZDou32YW2btGm8TlXal9xrLzLrZ28tWhNWaCQCAKVkVbY2qYU
or9fELs8KYPeqOnuXNn767NW3wCuHM49Y2Rpdn+A8+UrGI4FTjBB84Ayjni4o4nw
eeGUzZZjFGlxFVb0fzRmhp+UxqkooYIfWXdNR4T0h7p9uUhU+/3TRksXvC5tYKdZ
4kcsFKZ3lu85pCGh+X0NmOfNEhiVwTdjogBV4Bo0t4+kKHO46chaICM1W+Z6OblO
2iIGV3Ttzd9gUUqnaNrVQO3+VJblGl44n9Oylx0q5Ve2LmC1uLHTowC7QSLlFDbb
lwIDAQAB
-----END PUBLIC KEY-----
[root@server ~]# ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PEM
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAq6AuRTSM7b4cVXwPj2xe19HujKIYBeC/puaZDou32YW2btGm8TlX
al9xrLzLrZ28tWhNWaCQCAKVkVbY2qYUor9fELs8KYPeqOnuXNn767NW3wCuHM49
Y2Rpdn+A8+UrGI4FTjBB84Ayjni4o4nweeGUzZZjFGlxFVb0fzRmhp+UxqkooYIf
WXdNR4T0h7p9uUhU+/3TRksXvC5tYKdZ4kcsFKZ3lu85pCGh+X0NmOfNEhiVwTdj
ogBV4Bo0t4+kKHO46chaICM1W+Z6OblO2iIGV3Ttzd9gUUqnaNrVQO3+VJblGl44
n9Oylx0q5Ve2LmC1uLHTowC7QSLlFDbblwIDAQAB
-----END RSA PUBLIC KEY-----
Z 参考情報
12.3. OPENSSH クライアント
7 UNIX / Linux ssh-keygen Command Examples (Private and Public Key Management for SSH)
How do I convert a ssh-keygen public key into a format that openssl PEM_read_bio_RSA_PUBKEY() function will consume?
ssh-keygen で生成された OPENSSH フォーマットの秘密鍵を pem フォーマットへ変換する
Author And Source
この問題について(ssh-keygenコマンドの使い方), 我々は、より多くの情報をここで見つけました https://qiita.com/hana_shin/items/2003698873a5782b7efd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .