Linux常用命令-ssh-keygen

命令

ssh-keygen

描述

authentication key generation, management and conversion
生成ssh密钥对

用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 ...

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Options:
-A 使用默认设置
-a rounds 当保存新格式的私钥时,该选项指定使用的KDF(密钥派生函数)轮数
-B 显示指定的公钥/私钥文件的bubblebabble摘要
-b bits 指定密钥长度,dsa密钥1024位,rsa密钥2048位
-C comment 指定注释信息
-c 请求更改私钥文件和公钥文件中的注释,此操作仅支持RSA1密钥和存储在较新的OpenSSH格式的密钥
-D pkcs11 下载PKCS#11共享库pkcs11提供的RSA公钥
-E fingerprint_hash 指定显示密钥指纹时使用的哈希算法,可选参数为md5,sha256(默认)
-e 读取OpenSSH的私钥或公钥文件,并以RFC4716公钥文件格式显示
-F hostname 在known_hosts文件中搜索指定的hostname并列出所有的匹配项
-f filename 指定密钥文件名称
-G output_file 为DH-GEX产生候选素数,这些素数必须在使用之前使用-T选项进行安全筛选
-g 在使用-r打印指纹资源记录的时候使用通用的DNS格式
-H 对known_hosts文件进行散列计算,这将把文件中的所有主机名/ip地址替换为相应的散列值,原来文件的内容将会添加一个.old后缀保存
-h 签名密钥时创建主机证书而不是用户证书
-I certificate_identity 在签名公钥时指定密钥标识
-i 读取未加密的SSH-2兼容的私钥/公钥文件,然后显示OpenSSH兼容的私钥/公钥
-J num_lines 当使用-T选项执行DH候选筛选时,在筛选指定的行数后退出
-j start_line 在使用-T选项执行DH候选筛选时,从指定的行号开始筛选
-K checkpt 在使用-T选项执行DH候选筛选时,将处理的最后一行写入文件检查
-k 生成KRL文件
-L 显示证书内容
-l 显示公钥文件的指纹数据
-M memory 指定在生成DH-GEXS候选素数的时候最大内存(MB)
-m key_format 指定key格式,可选格式为RFC4716(默认),PKCS8,PEM.配合-i或-e使用
-N new_passphrase 指定新的密钥密码
-P passphrase 指定旧的密钥密码
-n principals 在签名密钥时,指定多个主体(用户名或主机名)包含在证书中
-O option 在签名密钥时指定证书选项
-o 使用新的OpenSSH格式保存私钥,而不是更兼容的PEM格式
-p 请求更改私钥文件的密码而不创建新的私钥.程序将提示输入私钥文件名,旧密码,以及两次新密码
-Q 测试密钥是否在KRL中被撤销
-q 静默模式
-R hostname 从known_hosts文件中删除所有属于hostname的密钥
-r hostname 显示名为hostname的公钥文件的SSHFP指纹资源记录
-S start 指定在生成DH-GEX候选模数时的起始点(16进制)
-s ca_key 使用指定的CA密钥验证(签名)公钥
-T output_file 测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性
-t type 指定算法类型,可选参数dsa,ecdsa,ed25519,rsa,rsa1,推荐rsa
-u 更新一个KRL
-V validity_interval 在签名证书时指定有效时间间隔
时间格式为YYYYMMDD[HHMMSS],支持相对时间,如+90d表示有效期为90天,
支持指定时间范围,如-1d:20220101表示有效期从昨天开始到20220201
-v 显示详情,用于显示ssh连接过程,最大支持-vvv显示更多信息
-W generator 在测试DH-GEX的候选模块时指定所需的生成器
-y 读取私钥输出公钥
-z serial_number 指定证书序列号,默认为0

注意

每个用户均有自己独立的密钥信息,默认ssh密钥保存在~/.ssh

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 本机加密性能测试
$ openssl speed rsa2048
Doing 2048 bit private rsa's for 10s: 16816 2048 bit private RSA's in 9.98s
Doing 2048 bit public rsa's for 10s: 564863 2048 bit public RSA's in 9.98s
OpenSSL 1.0.2k-fips 26 Jan 2017
sign verify sign/s verify/s
rsa 2048 bits 0.000593s 0.000018s 1685.0 56599.5

# 生成密钥对,注意目录和文件的权限
$ ssh-keygen -q -t rsa -b 2048 -P '' -f ~/.ssh/id_rsa -C 'centos'
$ ll .ssh/
total 20
drwx------ 2 root root 80 Mar 16 15:47 ./
dr-xr-x---. 7 root root 4096 Mar 16 15:46 ../
-rw------- 1 root root 1675 Mar 16 15:46 id_rsa
-rw-r--r-- 1 root root 388 Mar 16 15:46 id_rsa.pub
# 查看公钥文件,注意是一行内容
$ more .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQtALhniNe9r3QObMsaTuogVS1WePQnvHXE30ZXwkbTlgOQxJ/A1qMtHUqyxRZ27n8AeeaIGOZEKHvOKRcBBgTV/miQuCphraKrIZmzL5n8QN5CvA0W1NbQPD3dRF0ZhxIitISlAnsE9XeGvHAOH3xt5VeSorgC1fm95WNeTiA4TBs/37TmB8KNJpZwJEPye/lPJcW7U8bZoj7HBfiI8+YJGKV1l9bw/tEzI0KAqWv7LbGSvF+9zz/zd6T4/6E+35kxhWTTGxke5lg+zX1c1TvZdG283LIn8z6WDpOkUlUuWwHhrLboVbb7pzzbCE08HzkH+bCy2rlDTVUt4wWOzNF centos
# 查看私钥文件
$ more .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxY2oqXimtKX6HJYcup0K9oZMKKvb0I9rEGlEoeWgU4oLX14k
g9iDHYRBCRU4LN0auFsrej3rMhn91lf1MeMouUyj/XP1oYxcCt9EOwRMexdJj8Ee
qItkmBcj0K4IqNylG+vJlNL+7MqpJgPWu1cGFQ2NcueimW652bsoJLJ1AVfYGl14
K8VbRLQSIPJMOyp3j1VBo7B5eaG4ZTSwGh+nr/l1uxRihjDwdJKO750eefekcUfe
RWDIuscPq2HsPNgL5oFYvTfMSQ2bhMWE9uTyNoPBFp16rCqqruTXcfHrKL0+ICxe
JSYUs+7uspr5pJC18zS5jwIY5J4T58+q6Y5WwQIDAQABAoIBAQCG4Bhu2/i1DTyd
l781iVKazUXh3rPMyJ4ILla1UdkMMAtjqRq1CXU7Cbh9Qwd/WdWMWHJumyegpS4w
0QyOatC68iBkQm9JRFLy+UvUHzM4NsX6Z5dO6xxa2jGRn8A5yarQTULrYMK7WAHz
+lr4vIlihkY0VQEmT/qDNMxLgatwph0OHLPVvcHsJxYUA3olXi0QRjUsoKuiDmG/
Sbv2ligOp2Zei/GiOxAexF383rSX1v2pCGWimD0Shqgh8pSxxurkR6EKYN4p4dm+
pVq4urdr6y1kTlO6SAd0yLFYWMH0c8qWA8L0MNi2XPnn29Tcd1IEBRgXRYoMZgy6
Qo5Z41khAoGBAPDvZCZvt9vq7wHmsBbjxh6mNJnUbTWLg8ifewgUuJrX4G/1xVT9
Lk4cXbO3FXKVvmKxNFSXiAPox/ta+oKN4NOO2Qk1PZ6oqxN99+lNl5nnrNBTaAzn
8y/fTKMlNo8AjqzcE3g5KCtR/KU9kl8wPvd03UujBThVkerOnRZL3uq3AoGBANHn
3OJQEZKzeeTRhkf3La6mSE7nt5G54VA560zAOswBEPvZnjyNj4Fg7FO65/dghL+T
ddEcfRclvKZSW0qIrhimdikSVWXRc6zHO1CD950zrqdwhitk8dnxPFoCbsVmz2n7
1WEvTMstjSFhIs2rxTv62FgcD7o8qIJxT9M0uLJHAoGBAK7tQAtgBV9YHRuGP8b+
rLNH/NzLDFdZ6d5ZW9wsHzPdFIh1KkZgY6Q2mBmJDbtZ2RaSjen08r3T3o4yKbts
AxXWmuFClHCDCWJnjP0IZs9JE4FVbTAhn8DcISo6NHhy8SOzzTb2WKHLLuFR6NnP
j4feg2UNARc7mWufgxHTGA/VAoGACb8NV4jGOByTRVehN4g3m8tmwhsqP970okf+
L/MhB8Xo5vjEyyT7i9NXRdAA41Cc+VQ8fTgoasG6z7I1QPG1u7lG9UM/qdme2F/r
1iI6hhcXPfkQkcU/IZJ87eT9BbdvXAlwb/HFTA3SZsFe31PhdZaBIx4ycMBORrhC
L5lcFhMCgYA+SVvE+kJ7+QP3HVh43yP6EWP4OXDJK/9/IKyuMIz8XuXn/TJzQWbg
JLT7K7KMAlh1NoTj3FL4MqXIUHxPhqyBT7SqtYD3gaHpvibgHAA2kNy0JiwG38DX
kKNfN/ID1DbL9algpJ1t0oo4REXDhIqoU1zulusg6DzdHJgefXhKSw==
-----END RSA PRIVATE KEY-----
# 复制公钥到本地服务器或远程服务器,提示输入对应用户的密码
$ ssh-copy-id -i .ssh/id_rsa.pub root@localhost
# 在~/.ssh目录下会自动生成authorized_keys和known_hosts两个文件
$ ll .ssh/
total 20
drwx------ 2 root root 80 Mar 16 15:47 ./
dr-xr-x---. 7 root root 4096 Mar 16 15:46 ../
-rw------- 1 root root 388 Mar 16 15:47 authorized_keys
-rw------- 1 root root 1675 Mar 16 15:46 id_rsa
-rw-r--r-- 1 root root 388 Mar 16 15:46 id_rsa.pub
-rw-r--r-- 1 root root 171 Mar 16 15:47 known_hosts
# authorized_keys保存的是公钥信息
$ more .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQtALhniNe9r3QObMsaTuogVS1WePQnvHXE30ZXwkbTlgOQxJ/A1qMtHUqyxRZ27n8AeeaIGOZEKHvOKRcBBgTV/miQuCphraKrIZmzL5n8QN5CvA0W1NbQPD3dRF0ZhxIitISlAnsE9XeGvHAOH3xt5VeSorgC1fm95WNeTiA4TBs/37TmB8KNJpZwJEPye/lPJcW7U8bZoj7HBfiI8+YJGKV1l9bw/tEzI0KAqWv7LbGSvF+9zz/zd6T4/6E+35kxhWTTGxke5lg+zX1c1TvZdG283LIn8z6WDpOkUlUuWwHhrLboVbb7pzzbCE08HzkH+bCy2rlDTVUt4wWOzNF centos
# known_hosts保存的是主机信息
$ more .ssh/known_hosts
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAywBvTDXU7MSxKMtXTls0B4kaqvmP1PXLnkO0U2BaIvRRM5RNweM4CUjkslneyirQ6OM1WFVgpaj5NvrDrOyjQ=
# 测试免密码登录
$ ssh root@localhost
Last login: Tue Mar 16 13:46:03 2021 from 192.168.80.1
$ exit
logout
Connection to localhost closed.