Github 同一账号怎么用不同的 SSH key 管理多个仓库

18 阅读2分钟

简介

Github 一个账号下多个项目是常见的事,很多人在本地使用 git 时不知如何用多个 SSH Key 来管理多个远程仓库(Repositories)。这篇文章就详细介绍原理和方法。

SSH 登录

我们先来看一下我们使用 ssh 登录远程服务器时,我们是怎么配置本地 ~/.ssh/config 文件的。

假如我们有这样一个配置:

Host myserver
HostName 192.168.131.12
User tony
IdentityFile ~/.ssh/id_rsa
PubKeyAuthentication yes

解释:

配置中的 Host 是别名的意思,我们可以用它来代替主机名。

这样配置之后,我们就可以用下列命令登录服务器:

ssh myserver

相比于 要输入 ssh tony@192.168.131.12 是不是简单很多? 这是因为这里的 myserver 会被自动替换。

现在,我们回到 github.com 一个账户对应多个项目的问题

我们知道,Github 上的 repo 支持两种协议进行认证,HTTPS 和 GIT。

  • HTTPS 协议: github.com/username/pr…

  • SSH 协议: git@github.com:username/proj.git

  • GIT 协议: git://github.com/username/proj.git

  • 游客通常使用 HTTPS 协议访问 repo。

  • Owner 则使用 SSH 协议访问 repo。

  • GIT 协议不常用,这里不展开介绍。

作为 Owner,我们 remote-url 会设置成 git@github.com:username/proj.git 的形式。

现在假设我们在 github.com 同一个账户上有多个项目(以 project1, project2 为例) 为了方便我们管理 ssh 登录,pull,push 等动作,

首先我们需要按如下方式配置 ~/.ssh/config 文件:

Host project1 
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_1

Host project2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2

现在,我们只需要用如下方式,就可以正确访问两个同名账户下的不同 Projects 了:

git clone git@project1:user1/helloworld1.git
git clone git@project2:user1/helloworld2.git

与之前 SSH 登录类似,这里的 project1 和 project2 分别对应了两个不同的 SSH 配置, 并且 HostName 都是 github.com,但是这两个别名对应了两个不同的私钥,我们可以正确访问不同的 repo。

最后,有一点需要提示的是,虽然配置中还定义了 User git,不过测试下来发现,这个值并不会被访问到。 所以 User 的值设置与否都不重要,完全不影响连接成功。