ssh-keygen
ssh生成密钥(公钥/私钥)、管理密钥。
前言
ssh-keygen
是 SSH(安全外壳协议)工具链中的核心命令,主要用于 生成、管理和转换 SSH 密钥对。它主要用于创建公钥和私钥对,用于 SSH 协议的身份验证。其具体作用包括:
- 生成新的 SSH 密钥对(包括 RSA、ECDSA、Ed25519 等类型)。
- 管理现有的 SSH 密钥,例如更改密钥的密码或注释。
- 转换密钥格式,例如将密钥从 OpenSSH 格式转换为其他格式。
- 增强安全性
- 加密私钥:生成时通过
-a
参数指定迭代次数,提高抗暴力破解能力。
- 加密私钥:生成时通过
通过 ssh-keygen 生成的密钥对可用于无密码登录远程服务器、Git 仓库认证(如GitHub、Gitee、GitCode) 等,提高安全性和便利性。
查看帮助文档
ssh-keygen的帮助信息,可以通过man手册查看:
1
man ssh-keygen
如果使用的选项错误,也会输出帮助信息,如:
1
ssh-keygen --h
生成SSH密钥对
SSH密钥对包括公钥和私钥(public/private),默认情况下生成的密钥对位于~/.ssh
目录。
加密算法
支持多种加密算法(密钥类型)
:
加密算法 | 默认长度 | 允许范围 | 备注 |
---|---|---|---|
rsa | 3072 位 | 1024-16384 位 | 通用,兼容性最佳; 推荐 ≥3072 位(2023 年后标准) |
ed25519 | 256 位 | 固定长度,无需指定 -b | 更安全高效,推荐优先使用 |
ed25519-sk | |||
dsa | 1024 位 | 1024 位(固定) | 已过时,建议避免使用 |
ecdsa | 256 位 | 256/384/521 位 | 基于椭圆曲线; 由 -t ecdsa -b 256 指定 |
ecdsa-sk |
生成密钥对
下面演示创建用于身份验证的 公钥(public key) 和 私钥(private key)。
1
ssh-keygen -t rsa
-t
指定加密算法
。
1
ssh-keygen -t rsa -C "123456@gmail.com"
-C
用于标记密钥用途(添加注释comment
),如邮箱、服务器名。上一条命令中以随便写的邮箱123456@gmail.com为例。
以rsa加密算法生成的的密钥文件,在默认情况下,公钥(public key)为~/.ssh/id_rsa.pub
、私钥(private key)为~/.ssh/id_rsa
。
ssh-keygen 的 -b
选项用于 指定密钥的位数(长度),直接影响密钥的安全性和性能。位数越长,安全性越高,但生成和使用的计算开销也越大。示例:
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Windows默认存放目录(C:\Users\用户名/.ssh/id_rsa
,C:\Users\用户名/.ssh/id_rsa.pub
):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PS C:\Users\nk\Desktop> ssh-keygen.exe -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\nk/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\nk/.ssh/id_rsa
Your public key has been saved in C:\Users\nk/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:put5ZsEwhcWjK13HpTYskc0KNf4Pz7ilASHJPjS6VvM nk@DESKTOP-3D6EI3S
The key's randomart image is:
+---[RSA 4096]----+
| =++ |
| .oo*.o . |
| *+o* o |
| ++o+oB |
| ..=*S+o. |
| .oo*o. * |
| o.. E.o = |
| . o+ = |
| .++ o |
+----[SHA256]-----+
PS C:\Users\nk\Desktop>
管理密钥
删除旧密钥
- ssh-keygen -R
从~/.ssh/known_hosts
中移除无效的服务器密钥(公钥)指纹(通过-R
参数指定目标服务器)。1 2 3 4
ssh-keygen -R hostname # 用法 ssh-keygen -R example.com # 示例:删除 example.com 的旧密钥记录 ssh-keygen -R example.com -f ~/.ssh/known_hosts # 与上一条命令等价
-f
选项用于指定 known_hosts文件。 - 直接删除文件
更加单的方法是 直接删除known_hosts
和known_hosts.old
这两个文件,如:1 2
rm ~/.ssh/known_hosts rm ~/.ssh/known_hosts.old
~/.ssh/known_hosts 文件是由 SSH 客户端(即 ssh 命令)自动生成和维护的。
下次连接 ssh命令会重新自动生成。