Mac/Linux配置多个ssh密钥
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 这个“黑洞”中而不是输出到终端,这样每次打开终端都不会再有提示,一切自动化。