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
Last modification:January 3, 2025
如果觉得我的文章对你有用,请随意赞赏