less than 1 minute read

1、在~/.ssh目录下,使用ssh-keygen生成密钥

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "github"  #-C 备注,可根据需要修改,不影响密钥

接下来会出现以下内容:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/liu/.ssh/id_rsa): /Users/liu/.ssh/id_rsa_github
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/liu/.ssh/id_rsa_github
Your public key has been saved in /Users/liu/.ssh/id_rsa_github.pub
The key fingerprint is:
SHA256:Nb2DeVNxejTquFX7VmDwoLEklU5qj********** github
The key's randomart image is:
+---[RSA 4096]----+
|        ..+.o ..o|
|         --------|
|       + += ..*..|
|      . =..+o+.o.|
|       ----------|
|      -----------|
|     . o + + . oo|
|        ---------|
|              .+.|
+----[SHA256]-----+

注意,第二行不要直接Enter,要取一个与之对应的名称,以区分不同的密钥;第三行的密码选填(如果你能记得住)。出现最后的图形即表示密钥对生成成功,注意去.ssh目录下面确认一下。以上述代码为例,会生成两个文件:id_rsa_github & id_rsa_github.pub

按照上述步骤可生成对应不同应用的密钥

2、ssh密钥读取原则

当使用ssh时,系统默认只会读取 ~/.ssh/id_rsa 文件,不同名称的密钥不会读取,只需要将其他名称的密钥文件加入到ssh读取列表即可正常使用多个密钥文件。

# 查看当前列表
ssh-add -l
# 默认会显示如下内容
The agent has no identities.

3、将多个私钥文件添加到列表

使用 ssh-add 命令

cd ~/.ssh
ssh-add id_rsa_github
# 依次添加多个私钥文件即可

添加完成之后使用 ssh-add -l 查看列表,我这里有两个不同的密钥

4096 SHA256:Nb2DeVNxejTquFX7VmDwoLEklU5qj************** github (RSA)
4096 SHA256:Grce29RXvOx6bXeklyGtxEK82b***************** tencent cloud (RSA)

显示上述内容即代表添加成功,然后将.pub內的公钥添加到对应的远端系统即可,如authorized_keys文件或github公钥等。

4、持久化问题

其实 ssh-add 只是一个缓存,无法永久保存密钥信息,按照上述步骤操作完成后的确可以成功访问远程设备,但是在开机之后使用 ssh 就会发现密钥消失,需要重新 ssh-add 一下,这里,需要将其加入bashrc文件以确保每次运行终端都能够正确配置 sshkey。

打开当前 shell 的 rc 文件,我这里使用的是 zsh,所以我需要打开 ~/.zshrc,在最下面添加两行命令:

ssh-add .ssh/id_rsa_github
ssh-add .ssh/id_rsa_tencent

这样每次运行终端都会自动加载这两个密钥文件,但是会有提示添加成功的信息,为了将提示信息去除,将命令进行如下修改:

nohup ssh-add .ssh/id_rsa_github >> /dev/null
nohup ssh-add .ssh/id_rsa_tencent >> /dev/null

将命令的输出信息丢入 null 这个“黑洞”中而不是输出到终端,这样每次打开终端都不会再有提示,一切自动化。