本文介绍了在一个设备上配置多个 SSH-key 以用于不同的远程 Git 仓库的方法.
问题背景
当我们使用诸如 GitHub、码云等远程 Git 托管平台时,往往会配置账号中的 SSH-key 来方便进行拉取和推送仓库.
典型的做法是使用 ssh-keygen -t rsa -c
"someCommentLikeEmail"
命令及其默认配置生成在路径
~/.ssh
下的 RSA 公钥和私钥文件:id_rsa
和
id_rsa.pub
.
然后只需要把公钥文件中的内容复制粘贴到托管平台相应的位置即可.
这样一台设备的一个默认 RSA 密钥就能在多个不同的托管平台上使用了.
但当我们使用了两个 Github 账号时(例如一个用于公司项目,一个用于个人项目),便不得不配置另一个密钥,因为在不同账号中配置相同的 RSA 公钥是不被允许的,如下图:
配置多 SSH key
1. 添加 RSA key
仍然使用命令
1 |
|
生成 RSA 密钥对,但在接下来的选项中指定一个不同的文件名,例如:
1 |
|
这样就在 ~/.ssh
目录下生成了一对新的 RSA
密钥:new_rsa
和 new_rsa.pub
.
2. 密钥配置
生成了新的密钥后,便可将新密钥成功添加到第二个 GitHub 账号.
但此时向第二个 Github
仓库推送更新仍然会显示无权限,因为若不经配置系统默认仍使用默认的密钥对
id_rsa
.
需要如下配置:
在密钥目录 ~/.ssh/
下编辑或新建配置文件
config
,添加如下内容:
1 |
|
理解其中配置项就可以灵活配置更多的 SSH key 了:
Host
是我们自己定义的一个别名,用来更方便地指代HostName
.HostName
是远程地址的域名,需要正确配置.IdentityFile
指定使用该配置项中的域名(或别名)时所使用的密钥文件.User
使用 SSH 时的用户名,对于远程 Git 仓库来说一般使用git
.
以上第一个配置项,使域名为 github.com
的仓库默认使用
id_rsa
密钥对,第二个配置项为地址中使用了别名
alias
的仓库使用 new_rsa
密钥对
3. 使用别名配置仓库的远程地址
配置完以上内容后,当我们使用 alias
作为登陆地址时会使用指定的 new_rsa
密钥,否则仍默认使用
id_rsa
密钥,因此我们需要对想要使用 new_rsa
密钥的仓库地址做修改. 例如:
对于仓库地址为
1 |
|
的 GitHub 远程仓库,我们推送更新时系统仍默认使用 id_rsa
密钥,若想使用 new_rsa
密钥则需修改地址为:
1 |
|
其他
- 对于 Windows 用户需要注意
.ssh
目录的路径 - config 不生效的话检查语法或尝试重启终端或设备后重试
- 对于更多的密钥配置在
~/.ssh/config
文件中同理追加更多配置项即可