文章

ssh-keygen

ssh生成密钥(公钥/私钥)、管理密钥。

ssh-keygen

前言

ssh-keygen 是 SSH(安全外壳协议)工具链中的核心命令,主要用于 生成、管理和转换 SSH 密钥对。它主要用于创建公钥和私钥对,用于 SSH 协议的身份验证。其具体作用包括:

  1. 生成新的 SSH 密钥对(包括 RSA、ECDSA、Ed25519 等类型)。
  2. 管理现有的 SSH 密钥,例如更改密钥的密码或注释。
  3. 转换密钥格式,例如将密钥从 OpenSSH 格式转换为其他格式。
  4. 增强安全性
    • 加密私钥:生成时通过 -a 参数指定迭代次数,提高抗暴力破解能力。

通过 ssh-keygen 生成的密钥对可用于无密码登录远程服务器Git 仓库认证(如GitHub、Gitee、GitCode) 等,提高安全性和便利性。

查看帮助文档

ssh-keygen的帮助信息,可以通过man手册查看:

1
man ssh-keygen

如果使用的选项错误,也会输出帮助信息,如:

1
ssh-keygen --h

生成SSH密钥对

SSH密钥对包括公钥和私钥(public/private),默认情况下生成的密钥对位于~/.ssh目录。

加密算法

支持多种加密算法(密钥类型)

加密算法默认长度允许范围备注
rsa3072 位1024-16384 位通用,兼容性最佳;
推荐 ≥3072 位(2023 年后标准)
ed25519256 位固定长度,无需指定 -b更安全高效,推荐优先使用
ed25519-sk   
dsa1024 位1024 位(固定)已过时,建议避免使用
ecdsa256 位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_rsaC:\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> 

管理密钥

删除旧密钥

  1. 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文件。

  2. 直接删除文件
    更加单的方法是 直接删除known_hostsknown_hosts.old 这两个文件,如:
    1
    2
    
    rm ~/.ssh/known_hosts
    rm ~/.ssh/known_hosts.old
    

    ~/.ssh/known_hosts 文件是由 SSH 客户端(即 ssh 命令)自动生成和维护的

    下次连接 ssh命令会重新自动生成。

本文由作者按照 CC BY 4.0 进行授权