1. 前言
很多时候,我们需要在自己的电脑上配置多个 ssh keys。比如个人的 github 和公司的 gitlab。折腾了很久,终于找到了一个说明清晰的文章,我尝试着翻译一下。
原文链接 Multiple SSH keys for different accounts on Github or Gitlab
2. 多个 github 账号
- 创建 ssh-key,下面这条命令无需赘言
$ ssh-keygen -t rsa -C "your_name@home_email.com"
- 输入命令然后 enter 就行,接下来会出现这样的提示
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user_name/.ssh/id_rsa):
你可以自己取个名字,用以标识不同的账号,比如 id_rsa_home。 也可以建立一个单路的文件夹来存放, 比如:/home/user_name/.ssh/home/id_rsa 。你也可以改成别的路径。输入完成后,继续 enter,会提示设置短语(passphrase),这个我偷懒就直接 enter 了,没有设置短语。
- 创建第二个 ssh-key,重复上面的步骤就可以了,只是在第 2 步的时候换一个名字或者路径就可以了。
- 添加配置文件
$ cd ~/.ssh/
$ touch config
$ nano config
添加以下内容,都是固定格式,只需要更改 IdentifyFile 为对应的文件名或者路径就可以了
# Home account
Host home.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_home
# Company account
Host company.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
然后删除缓存的 key
$ ssh-add -D
如果提示一下内容
Could not open a connection to your authentication agent.
你需要启动 ssh-agent
eval `ssh-agent -s`
重新执行上一条命令,然后可以通过以下命令检查你的配置
$ ssh-add -l
2048 d4:e0:39:e1:bf:6f:e3:26:14:6b:26:73:4e:b4:53:83 /home/user/.ssh/id_rsa_home (RSA)
2048 7a:32:06:3f:3d:6c:f4:a1:d4:65:13:64:a4:ed:1d:63 /home/mateusz/.ssh/id_rsa_company (RSA)
如果什么都没输出,你需要执行以下命令(将后面的路径更改为对应的路径)
ssh-add ~/.ssh/id_rsa_company
ssh-add ~/.ssh/id_rsa_home
最后,你可以愉快的测试你的 ssh-key 能否正常连接
$ ssh -T git@home.github.com
Hi home_user! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@work.github.com
Hi company_user! You've successfully authenticated, but GitHub does not provide shell access.
3. github 和 gitlab
我个人就输入这种情况,公司用的 gitlab,同时我要配置我自己的 github。同上面的配置文件,主要是修改了 Host 配置项
# GITLAB
Host gitlab.company_url.com
HostName gitlab.company_url.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
# GITHUB
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_home
然后可以测试下
$ ssh -T git@gitlab.company_url.com
Welcome to GitLab, CompanyUser!
$ ssh -T git@github.com
Hi home_user! You've successfully authenticated, but GitHub does not provide shell access.