Skip to content

ssh-keygen

我们所说的密钥通常都是指非对称加密的密钥,通常使用 OpenSSH 包提供的 ssh-keygen 工具来生成密钥。

通常的做法是使用 ssh-keygen -t dsa/ecdsa/ed25519 来生成对应加密算法的密钥,更推荐的是使用 ed25519 他在提供更好的安全性的同时加密速度也更加的快:

Bash
(base) PS C:\Users\ygd> ssh-keygen.exe -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\ygd/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\ygd/.ssh/id_ed25519.
Your public key has been saved in C:\Users\ygd/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:DMjfMTt4HZqUOKxGD7H/XWvJXaGX6CxM2nN2RPaJkok ygd@DESKTOP-KQ7UKJE
The key's randomart image is:
+--[ED25519 256]--+
|    .            |
|   . = . .       |
|    * = = .    + |
|   . * B B..o * =|
|    o = SE.=.+ =o|
|   .   o o=o++o. |
|        ...===.. |
|           .= .  |
|                 |
+----[SHA256]-----+
  1. 询问你要保存的位置,默认是家目录下的 ~/.ssh/ 文件夹内,名字就是 id_加密算法id_加密算法.pub 一个是私钥一个是公钥
  2. 让你为私钥文件设置密码(passphrase),这样即使私钥丢失也还可以使用密码保护私钥,当然密码可以为空。这里之所以使用 passphrase 就是告诉用户这里是保护密钥的密码而不是登录密码
  3. 生成的密钥

一个完整的公钥如下:

Bash
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPrcBOnCcCv/FCr0HV79TTwcfDfc00dih10jAq7B7/9m ygd@DESKTOP-KQ7UKJE

其中 ssh-ed25519 表示加密算法,之后就是公钥的密钥(注意这个是没有经过 hash 算法的)。后面的 ygd@DESKTOP 这是公钥的注释,用来识别不同的公钥的表示这是哪台主机的哪个用户的公钥,并不是必须项目,你可以当他是这个公钥的名字用来让用户管理自己密钥时使用的。通常可以更改为邮箱,或者在生成时通过指定 -C hncjygd@163.com 这样的形式来指定注释。

通常我们还需要更改权限为 600 来禁止其他人读取密钥

更改密码

如果想要更改私钥的密码可以使用 ssh-keygen -p -f ~/.ssh/id_ed25519 这样的形式来更改,他会首先提示你输入旧的密钥让后添加新的密钥。

部署多密钥

如果存在多个密钥就需要在 ssh 的客户端配置文件中(~/.ssh/config)定义 IdentityFile 来指定密钥位置。例如在 gitee 上定义了个人公钥以及仓库公钥,就可以定义:

Text Only
Host gitee.com
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_ed25519
Host public.gitee.com
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/giteepublic_ed25519

对于仓库 git@gitee.com/username/example.git 有两种使用情况:

  • 直接 git@gitee.com/username/example.git 就是使用的第一个配置,使用 ~/.ssh/id_ed25519 来鉴权
  • 如果是 git@public.gitee.com/username/example.git 就是使用的第二个配置,使用 ~/.ssh/giteepublic_ed25519 来鉴权