ssh-keygen 用法和命令

ssh-keygen 命令

(粗体标识常用) 

ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile] [-m format] [-N new_passphrase] [-O option] [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider] [-Z cipher]

ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase] [-P old_passphrase] [-Z cipher]
ssh-keygen -i [-f input_keyfile] [-m key_format]
ssh-keygen -e [-f input_keyfile] [-m key_format]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D pkcs11
ssh-keygen -F hostname [-lv] [-f known_hosts_file]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -K [-a rounds] [-w provider]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -r hostname [-g] [-f input_keyfile]
ssh-keygen -M generate [-O option] output_file
ssh-keygen -M screen [-f input_file] [-O option] output_file
ssh-keygen -I certificate_identity -s ca_key [-hU] [-D pkcs11_provider] [-n principals]
[-O option] [-V validity_interval] [-z serial_number] file ...
ssh-keygen -L [-f input_keyfile]
ssh-keygen -A [-a rounds] [-f prefix_path]
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ...
ssh-keygen -Q [-l] -f krl_file file ...
ssh-keygen -Y find-principals [-O option] -s signature_file -f allowed_signers_file
ssh-keygen -Y match-principals -I signer_identity -f allowed_signers_file
ssh-keygen -Y check-novalidate [-O option] -n namespace -s signature_file
ssh-keygen -Y sign [-O option] -f key_file -n namespace file ...
ssh-keygen -Y verify [-O option] -f allowed_signers_file -I signer_identity -n namespace -s
signature_file [-r revocation_file]

说明

ssh-keygen 为 ssh 生成、管理和转换身份验证密钥。 ssh-keygen 可以创建供 SSH 协议版本 2 使用的密钥。

要生成的密钥类型使用 -t 选项指定。如果在没有任何参数的情况下调用,ssh-keygen 将生成一个 RSA 密钥。 ssh-keygen 还用于生成用于 Diffie-Hellman 组交换 (DH-GEX) 的组。 ssh-keygen 可用于生成和更新密钥撤销列表,并测试给定的密钥是否已被撤销。

通常每个希望使用 SSH 和公钥身份验证的用户都会运行一次,以在 ~/.ssh/id_dsa、~/.ssh/id_ecdsa、~/.ssh/id_ecdsa_sk、~/.ssh/id_ed25519、~/ssh/id_ed25519_sk 或 ~/.ssh/id_rsa 中创建身份验证密钥。此外,系统管理员可以使用它来生成主机密钥。

通常,该程序会生成密钥并要求在其中存储私钥的文件。公钥存储在具有相同名称但附加了“.pub”的文件中。该程序还要求输入密码。密码可以为空表示没有密码(主机密钥必须有一个空的密码),也可以是任意长度的字符串。稍后可以使用 -p 选项更改密码。同时,没有办法恢复丢失的密码。如果密码丢失或忘记,则必须生成新密钥并将相应的公钥复制到其他相应的机器上。

ssh-keygen 默认会以 OpenSSH 特定的格式写入密钥。这种格式是首选,因为它为静态密钥提供了更好的保护,并允许在私钥文件本身中存储密钥注释。关键注释可能有助于识别关键。创建密钥时,注释被初始化为“user@host”,但可以使用 -c 选项进行更改。

ssh-keygen 仍然可以使用 -m 标志写入以前使用的 PEM 格式私钥。这可以在生成新密钥时使用,并且可以使用此选项与 -p(更改密码)标志一起转换现有的新格式密钥。

具体参数说明

-A 对于不存在主机密钥的每种密钥类型(rsa、dsa、ecdsa 和 ed25519),生成具有默认密钥文件路径、空密码、密钥类型的默认位和默认注释的主机密钥。如果还指定了 -f,则其参数用作生成的主机密钥文件的默认路径的前缀。系统管理脚本使用它来生成新的主机密钥。

-a rounds 保存私钥时,此选项指定使用的 KDF(密钥派生函数,当前为 bcrypt_pbkdf(3))轮数。较高的数字会导致密码验证速度变慢,并增加对暴力密码破解的抵抗力(如果密钥被盗)。默认值为 16 轮。

-B 显示指定私钥或公钥文件的泡泡摘要。

-b bits 指定要创建的密钥的位数。对于 RSA 密钥,最小大小为 1024 位,默认为 3072 位。一般认为 3072 位就足够了。 DSA 密钥必须是 FIPS 186-2 指定的 1024 位。对于 ECDSA 密钥,-b 标志通过从以下三种椭圆曲线大小之一中选择来确定密钥长度:256、384 或 521 位。尝试对 ECDSA 密钥使用这三个值以外的位长度将失败。 ECDSA-SK、Ed25519 和 Ed25519-SK 密钥具有固定长度,并且 -b 标志将被忽略。

-C 注释 提供新注释。

-c 请求更改私钥和公钥文件中的注释。程序将提示输入包含私钥的文件,如果密钥有密码,则提示输入密码,以及新的评论。

-D pkcs11 下载 PKCS#11 共享库 pkcs11 提供的公钥。当与 -s 结合使用时,此选项表示 CA 密钥驻留在 PKCS#11 令牌中(有关详细信息,请参阅证书部分)。

-E 指纹哈希 指定显示密钥指纹时使用的哈希算法。有效选项为:“md5”和“sha256”。默认值为“sha256”。

-e 此选项将读取私有或公共 OpenSSH 密钥文件并以 -m 选项指定的格式之一将公共密钥打印到标准输出。默认导出格式为“RFC4716”。此选项允许导出 OpenSSH 密钥以供其他程序使用,包括几个商业 SSH 实现。

-F 主机名 | [hostname]:port 在 known_hosts 文件中搜索指定的主机名(带有可选端口号),列出找到的所有匹配项。此选项对于查找散列主机名或地址很有用,也可以与 -H 选项结合使用,以散列格式打印找到的键。

-f 文件名 指定密钥文件的文件名。

-g 使用 -r 命令打印指纹资源记录时使用通用 DNS 格式。

-H 散列 known_hosts 文件。这将使用指定文件中的散列表示替换所有主机名和地址;原始内容被移动到带有 .old 后缀的文件中。 ssh 和 sshd 可以正常使用这些哈希值,但如果文件的内容被泄露,它们不会泄露识别信息。此选项不会修改现有的散列主机名,因此可以安全地用于混合散列和非散列名称的文件。

-h 签署密钥时,创建主机证书而不是用户证书。
-I 证书身份
签署公钥时指定密钥身份。

-i 该选项将读取 -m 选项指定格式的未加密私有(或公共)密钥文件,并将 OpenSSH 兼容的私有(或公共)密钥打印到标准输出。此选项允许从其他软件导入密钥,包括几个商业 SSH 实现。默认导入格式为“RFC4716”。

-K 从 FIDO 身份验证器下载常驻密钥。对于每个下载的密钥,公钥和私钥文件将写入当前目录。如​​果附加了多个 FIDO 验证器,将从第一个接触的验证器下载密钥。

-k 生成一个 KRL 文件。在这种模式下,ssh-keygen 将在通过 -f 标志指定的位置生成一个 KRL 文件,该文件会撤销命令行上提供的每个密钥或证书。要撤销的密钥/证书可以由公钥文件指定。

-L 打印一个或多个证书的内容。

-l 显示指定公钥文件的指纹。对于 RSA 和 DSA 密钥,ssh-keygen 尝试找到匹配的公钥文件并打印其指纹。如果与 -v 结合使用,则密钥的视觉 ASCII 艺术表示将与指纹一起提供。

-M 生成
生成候选 Diffie-Hellman 组交换 (DH-GEX) 参数,以供“diffie-hellman-group-exchange-*”密钥交换方法最终使用。此操作产生的数字在使用前必须进一步筛选。

-M 屏幕
筛选 Diffie-Hellman Group Exchange 的候选参数。这将接受候选数字列表,并使用可接受的组生成器测试它们是否是安全的(Sophie Germain)素数。此操作的结果可能会添加到 /etc/ssh/moduli 文件中。

-m 密钥格式
指定密钥生成的密钥格式、-i(导入)、-e(导出)转换选项和 -p 更改密码短语操作。后者可用于在 OpenSSH 私钥和 PEM 私钥格式之间进行转换。支持的密钥格式有:
“RFC4716”(RFC 4716/SSH2 公钥或私钥)、“PKCS8”(PKCS8 公钥或私钥)或“PEM”(PEM 公钥)。默认情况下,OpenSSH 将以自己的格式写入新生成的私钥,但在转换公钥以进行导出时,默认格式为“RFC4716”。在生成或更新支持的私钥类型时设置“PEM”格式将导致密钥以旧 PEM 私钥格式存储。

-N new_passphrase
提供新密码。

-n 主体
指定签名密钥时要包含在证书中的一个或多个主体(用户名或主机名)。可以指定多个主体,用逗号分隔。

-P 密码
提供(旧)密码。

-p 请求更改私钥文件的密码,而不是创建新的私钥。程序将提示输入包含私钥的文件,输入旧密码,两次输入新密码。

-Q 测试 KRL 中的密钥是否已被撤销。如果还指定了 -l 选项,则将打印 KRL 的内容。

-q 沉默 ssh-keygen。

-R 主机名 | [hostname]:port 从 known_hosts 文件中删除属于指定主机名(带有可选端口号)的所有键。此选项对于删除散列主机很有用(请参阅上面的 -H 选项)。

-r 主机名
打印指定公钥文件的名为 hostname 的 SSHFP 指纹资源记录。

-s ca_key
使用指定的 CA 密钥验证(签名)公钥。生成 KRL 时,-s 指定用于通过密钥 ID 或序列号直接撤销证书的 CA 公钥文件的路径。

-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | RSA
指定要创建的密钥类型。可能的值为“dsa”、“ecdsa”、“ecdsa-sk”、“ed25519”、“ed25519-sk”或“rsa”。
当使用 RSA CA 密钥签署证书时,此标志还可用于指定所需的签名类型。可用的 RSA 签名变体是“ssh-rsa”(SHA1 签名,不推荐)、“rsa-sha2-256”和“rsa-sha2-512”(默认值)。

-U 当与 -s 结合使用时,此选项表示 CA 密钥驻留在 ssh-agent 中。

-u 更新 KRL。当使用 -k 指定时,通过命令行列出的键被添加到现有的 KRL,而不是创建新的 KRL。

-V 有效性间隔
签署证书时指定有效期。有效性间隔可以由单个时间组成,表明证书从现在开始有效并在那时到期,或者可以由用冒号分隔的两个时间组成,以指示明确的时间间隔。
开始时间可以指定为字符串“always”以指示证书没有指定的开始时间、YYYYMMDD 格式的日期、YYYYMMDDHHMM[SS] 格式的时间、由减号组成的相对时间(相对于当前时间)符号后跟一个间隔,格式在 sshd_config(5) 的 TIME FORMATS 部分中描述。

结束时间可以指定为 YYYYMMDD 日期、YYYYMMDDHHMM[SS] 时间、以加号字符或字符串“forever”开头的相对时间,以指示证书没有到期日期。
例如:“+52w1d”(从现在到 52 周和 1 天后有效)、“-4w:+4w”(从 4 周前到 4 周后有效)、“20100101123000:20110101123000”(从 12 :30 PM,2010 年 1 月 1 日至 12:30 PM,2011 年 1 月 1 日),“-1d:20110101”(从昨天到 2011 年 1 月 1 日午夜有效),“-1m:forever”(从一分钟开始有效以前并且永不过期)。

-v 详细模式。使 ssh-keygen 打印有关其进度的调试消息。这有助于调试模数生成。多个 -v 选项会增加详细程度。最大值为 3。

-w 提供者
指定在创建 FIDO 身份验证器托管密钥时将使用的库路径,覆盖使用内部 USB HID 支持的默认设置。

-y 此选项将读取私有 OpenSSH 格式文件并将 OpenSSH 公钥打印到标准输出。

-Z 密码
指定在编写 OpenSSH 格式的私钥文件时用于加密的密码。可以使用“ssh -Q cipher”获取可用密码列表。默认为“aes256-ctr”。

-z 序列号
指定要嵌入证书中的序列号,以将此证书与来自同一 CA 的其他证书区分开来。如果序列号以“+”字符为前缀,则序列号将为在单个命令行上签名的每个证书递增。默认序列号为零。生成 KRL 时,-z 标志用于指定 KRL 版本号。

posted @ 2022-08-29 17:01  Dirigent  阅读(6239)  评论(0编辑  收藏  举报