1. 简介
ssh-keygen 是一个认证密钥的生成、管理和转换的工具。采用密钥对的形式,生成一个私钥和一个公钥。
可以用来做用于远程服务器的链接、Github 的 SSH 链接等。
2. 命令格式
ssh-keygen -t ed25519 -C "comment" -f file_name -N '' -q
选项
-t
选项(默认rsa
)
生成的密钥类型(不带默认为 rsa
),类型有六种分别是 dsa
| ecdsa
| ecdsa-sk
| ed25519
| ed25519-sk
| rsa
ssh-keygen -t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
详细比较如下:
密钥类型 | 安全性 | 性能 | 兼容性 | 建议使用场景 |
---|---|---|---|---|
DSA | 不安全,固定 1024 位密钥长度,不符合现代需求 | 签名快,验证慢 | 旧版本 SSH 支持,OpenSSH 7.0 后禁用 | 不推荐使用 |
RSA | 安全,密钥长度建议至少 3072 位 | 签名和验证速度适中 | 广泛支持 | 需要兼容性时使用 |
ECDSA | 安全,基于椭圆曲线,但存在政治和技术争议 | 签名和验证速度较快 | OpenSSH 5.7 及更高版本支持 | 不推荐使用 |
ECDSA-SK | 高安全性,依赖硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 |
Ed25519 | 高安全性,当前推荐算法 | 签名和验证速度非常快,密钥短 | OpenSSH 6.5 及更高版本支持 | 推荐使用 |
Ed25519-SK | 高安全性,结合 Ed25519 算法和硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 |
上述包含
SK
字样的密钥类型的私钥存储在硬件设备(如 FIDO2 安全密钥)中,硬件设备负责签名操作,主机只接收签名结果,私钥在整个过程中保持安全,从不离开设备,即使主机被攻陷,私钥仍然安全。
-b
选项
表示生成的密钥的大小(以字节:byte 为单位),密钥类型为 RSA
时,建议指定密钥的大小为 3072
位或以上,Ed25519
可不指定
ssh-keygen -t rsa -b 3072
-C
选项
生成密钥的描述信息,默认为{用户名}@{主机名}
。(会追加到公钥.pub
内容的末尾)
-f
选项
文件名称,或者文件路径,默认路径为~/.ssh/id_{密钥类型}
,可在后续Enter file in which to save the key
时指定
-N
选项
指定新密码,'' 表示密码为空,可在后续提示Enter passphrase
时指定,默认为空
-q
选项
静默模式,直接生成密钥对,不现实过程中产生的信息。
3. 配置 SSH 密钥登录
使用以下命令创建一个Ed25519
的密钥对
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 <==生成的公钥路径
以上面为例,生成的私钥路径为/root/.ssh/id_ed25519
,生成的公钥路径为/root/.ssh/id_ed25519.pub
接下来将公钥文件放到需要免密登录用户目录的~/.ssh/authorized_keys
内即可
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
最后将~/.ssh/id_ed25519
下载并导入本地 SSH 工具内即可实现密钥登录,部分工具还需要将私钥文件设置为 600
才可以使用
chmod 600 id_ed25519