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]-----+
- 询问你要保存的位置,默认是家目录下的
~/.ssh/
文件夹内,名字就是id_加密算法
和id_加密算法.pub
一个是私钥一个是公钥 - 让你为私钥文件设置密码(passphrase),这样即使私钥丢失也还可以使用密码保护私钥,当然密码可以为空。这里之所以使用 passphrase 就是告诉用户这里是保护密钥的密码而不是登录密码
- 生成的密钥
一个完整的公钥如下:
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
来鉴权