前段时间由于实验室项目工作需要,用实验室的公有邮箱额外注册了一个Github帐号用于内部项目的提交。然而,在一台机器上直接地使用多个帐号的SSH密钥是存在问题的,如果不经过谨慎的配置管理,将可能出现提交身份串用的问题。
分析🔍️
假定目前我们已经为两个或者多个Github帐号配置了SSH密钥,那么我们要做就是利用SSH和Git工具的配置规则来更改不同场景下应该使用的SSH密钥。
OpenSSH的配置🔑️
一般而言,OpenSSH的用户配置文件默认路径为~/.ssh/config
(对于Windows系统,一般为用户目录下的.ssh/config
)。当该文件不存在时,意味着本机尚未配置任何SSH连接,需要手动创建该文件:
touch ~/.ssh/config
接下来,我们需要为不同的Github帐号设定不同的密钥认证文件,在~/.ssh/config
中加入以下模板:
# Personal Github Account
Host github-mine
HostName github.com
User git
IdentityFile ~/.ssh/key_mine
# Lab Github Account
Host github-lab
HostName github.com
User git
IdentityFile ~/.ssh/key_lab
此处IdentityFile的含义即为指定SSH密钥文件。
经过以上配置,我们就可以使用我们自定义的规则去克隆在不同Github帐号下的仓库了。只需要将SSH克隆地址中的github.com
替换为我们在SSH配置文件中的特定HOST即可,例如:
git clone git@github.com:xxxx/repo.git # 正常地址
git clone git@github-mine:xxxx/repo.git # 使用帐号A的密钥
git clone git@github-lab:xxxx/repo.git # 使用其他帐号的密钥
同样地,我们也可以设定一个缺省值,即对于正常SSH克隆地址使用的密钥:
# Default Account
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/key_default
结束了吗?🤔️
显然,我们还没修改Git提交时的邮箱身份。对于不同帐号的仓库,我们需要单独设定其提交邮箱身份:
cd xxx/xxx/repo_a # 到仓库a
git config --local user.email "abc@gmail.com" # 设定仓库a的邮箱身份
git config --local user.name "abc" # 设定仓库a的用户身份
同样地,我们可以设定全局的默认身份:
git config --global user.email "me@gmail.com"
git config --global user.name "me"
验证✅
最后我们可以验证一下实际上是否使用了我们在SSH配置文件中指定的密钥:
ssh -T github-mine
ssh -T github-lab