Linux命令——ssh-keygen
1. 说明
ssh-keygen
命令用于生成 SSH 密钥对,其中包括公钥和私钥。这对密钥可用于实现安全的身份验证和加密通信。生成的公钥可以被共享,并在远程主机上配置以实现无密码登录等功能。
2. 语法
|
|
3. 选项
-
-t 类型
:指定密钥类型- 示例:
ssh-keygen -t rsa
- 示例:
-
-b 位数
:指定密钥位数(位数越高,安全性越高,但性能越差)- 示例:
ssh-keygen -t rsa -b 2048
- 示例:
-
-C 注释
:添加注释- 示例:
ssh-keygen -t rsa -b 2048 -C "user@example.com"
- 示例:
-
-f 文件名
:指定密钥文件的名称- 示例:
ssh-keygen -f /path/to/custom_key
- 示例:
-
-N 密码
:设置密码- 示例:
ssh-keygen -t rsa -b 2048 -N "passphrase"
- 示例:
-
-q
:静默模式(不显示进度信息)- 示例:
ssh-keygen -t rsa -b 2048 -q
- 示例:
-
-E 哈希算法
:指定哈希算法可以是
md5
和sha256
,默认为:sha256
。- 示例:
ssh-keygen -t rsa -b 2048 -E sha256
- 示例:
-
-y
:从私钥生成公钥查看或提取私钥文件对应的公钥,而无需重新生成密钥对。
- 示例:
ssh-keygen -y -f ~/.ssh/id_rsa
- 示例:
-
-i
:将私钥文件的格式转换为 OpenSSH 格式- 示例:
ssh-keygen -i -f ~/.ssh/id_rsa
- 示例:
具体参数说明参见:具体参数说明
4. 简单示例
-
生成默认类型(RSA)的密钥对:
1
ssh-keygen
-
生成指定类型(DSA)和位数(1024)的密钥对:
1
ssh-keygen -t dsa -b 1024
-
生成带注释的密钥对:
1
ssh-keygen -t rsa -b 2048 -C "user@example.com"
-
生成密钥对并指定文件名:
1
ssh-keygen -f /path/to/custom_key
-
生成带密码保护的密钥对:
1
ssh-keygen -t rsa -b 2048 -N "passphrase"
5.实例
|
|
生成一个 2048 比特的 RSA 密钥对,同时添加了一个注释 “test”(存在于公钥文件中)。

由于上面的命令我们没有指定生成的密钥对的路径和名称,所以这里提示我们指定密钥对的路径和名称。
我们可以有下面几种选择:
-
直接回车。
使用默认的文件路径和文件名。如果是
root
用户,则会存放于/root/.ssh
文件夹中,私钥文件名为:id_rsa
,公钥文件名为:id_rsa.pub
。 -
只指定文件名,如:
test
。生成的两个密钥文件就会存放于执行当前命令的文件夹中,私钥文件名为:
test
,公钥文件名为:test.pub
。 -
指定路径和文件名,如:
/root/rsa_keys/test
。生成的两个密钥文件的存放路径为:/root/rsa_keys,私钥文件名为:
test
,公钥文件名为:test.pub
。
然后进入下一步,指定私钥的密码。

可以选择输入密码(确认密码),也可以直接回车跳过此步(不设置密码)。

然后就可以看到密钥对生产的位置啦!
6.具体参数说明
密钥类型
-t
参数指定生成密钥的类型,不同的密钥类型在 SSH 中使用不同的算法,以下是对每种密钥类型(rsa1
、rsa
、dsa
、ecdsa
和 ed25519
)的简要介绍:
-
rsa1(已过时):
- 算法: 使用 RSA 算法,但是是早期版本。
- 安全性: 目前不再推荐使用,因为它的安全性较低,容易受到攻击。
- 使用场景: 仅在与旧系统或特殊需求的兼容性问题中使用。
-
rsa:
- 算法: 使用 RSA(Rivest–Shamir–Adleman) 算法。
- 安全性: RSA 是一种常见、广泛使用的非对称加密算法,提供良好的安全性,RSA的安全性基于大整数的质因数分解问题的困难性。
- 使用场景: 适用于一般的 SSH 密钥对生成,是默认的密钥类型。
-
dsa:
- 算法: 使用数字签名算法(Digital Signature Algorithm)。
- 安全性: DSA 提供了数字签名和验证的功能,但相对于 RSA,长度相对较短,通常在 512 到 1024 位之间。
- 使用场景: 在一些特定的环境中使用,但较少见。
-
ecdsa:
- 算法: 使用椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)。
- 安全性: 提供与传统算法相似的安全性,但使用更短的密钥长度,因此具有更好的性能。其安全性基于椭圆曲线离散对数问题的困难性。
- 使用场景: 适用于资源受限的环境,如嵌入式系统。
-
ed25519:
- 算法: 使用 Ed25519 曲线。
- 安全性: Ed25519算法具有较高的性能和较小的密钥长度,同时提供了强大的安全性。它在许多应用中被广泛使用,包括数字签名、密钥交换等。。
- 使用场景: 由于其性能和安全性的优势,Ed25519逐渐成为了一种常见的非对称加密算法,推荐用于新的密钥生成。
选择密钥类型的建议:
- 如果不确定,使用默认的
rsa
类型通常是一个不错的选择。 - 对于更高的安全性和性能,可以考虑使用
ed25519
类型。 - 避免使用已过时的
rsa1
类型,除非与旧系统或特殊需求兼容。
密钥位数
-b
参数指定要创建的密钥中的位数。
- RSA密钥,最小大小为1024位,默认值为2048位,一般认为2048位是足够的。
- DSA密钥,必须是1024位(FIPS 186-2 标准的要求)。
- ECDSA密钥,
-b
参数用于指定椭圆曲线的位数,而不是直接指定密钥的位数。必须从三种椭圆曲线大小(256、384或521)中选择一个值,使用其他值将导致密钥创建失败。 - ED25519密钥,具有固定长度 256 位,-b标志将被忽略。
添加注释
-C
参数用于向生成的 SSH 密钥添加一个注释(comment)。注释通常用于标识该密钥的用途或属主。注释字符串会被保存在生成的公钥文件中,以便用户在管理密钥时可以更容易地理解密钥的用途。这对于在一个系统上管理多个密钥,或在多个系统上使用相同密钥时,能够更好地组织和识别密钥。
指定密钥文件路径
-f
参数用于指定生成的密钥文件的名称和路径。通过 -f
参数,你可以自定义生成的密钥文件的存储位置和名称。这在需要为不同用途、不同用户或不同主机生成多个密钥对时非常有用。
如果不指定 -f
参数,生成的密钥文件将使用默认路径。默认路径取决于操作系统和用户的家目录。通常情况下,SSH 密钥文件的默认路径如下:
-
私钥文件默认路径:
- Linux 和 macOS:
~/.ssh/id_rsa
- Windows:
C:\Users\YourUsername\.ssh\id_rsa
- Linux 和 macOS:
-
公钥文件默认路径:
- Linux 和 macOS:
~/.ssh/id_rsa.pub
- Windows:
C:\Users\YourUsername\.ssh\id_rsa.pub
- Linux 和 macOS:
在这里,~
表示用户的家目录。
私钥文件添加密码
-N
参数用于生成 SSH 密钥对时为私钥文件添加一个密码,以提高密钥的安全性。
- 如果不提供
-N
参数,或者提供空的密码(-N ""
),则生成的私钥文件将不加密,即没有密码保护。 - 在使用密码保护的私钥文件时,每次访问时都需要输入密码,这可以增加密钥的安全性,特别是在私钥文件可能被未经授权的人访问的情况下。