让多个 Github 仓库使用相同的 Deploy Key

#站点记录 @Github
版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。

相信在同一机器上部署多个应用并不是什么罕见的需求,特别是像我这样很小的个人网站来说更是如此。但在我部署子站的时候发现一个问题,那就是 Github 并不允许多个仓库使用相同的 Deploy Key。如果你尝试这样做的话,会得到如下提示:

Deploy Key Already Exist

但我又需要 Deploy Key 来简化项目的部署,其他方式(包括每次更新时手工输入,或者用明文记录 Github 登录信息)都是不可接受的。那应该怎么办呢?稍加检索,找到了如下的方法,记此备考。

首先,在生成 SSH Key 的时候,需要添加 -f 参数,指定不同于默认的文件名(id_rsa),以免无意中覆盖:

ssh-keygen -t rsa -f ~/.ssh/repo1_rsa -C "repo1 user"
ssh-keygen -t rsa -f ~/.ssh/repo2_rsa -C "repo2 user"

接下来,需要自己编辑 ~/.ssh/config 文件以指定不同的登录配置。如果该文件不存在,则新建一个:

Host repo1
Hostname github.com
User git
IdentityFile ~/.ssh/repo1_rsa

Host repo2
Hostname github.com
User git
IdentityFile ~/.ssh/repo2_rsa

这里的要点是,用不同的 Host 代替默认的 git 协议地址(github.com)。

然后,你可以按照配置,把生成的 SSH Key 配置到不同的 Github 仓库。

最后,在签出仓库时,使用类似下面的命令:

git clone git@repo1:<repos1_url>
git clone git@repo2:<repos2_url>

其中 Host 部分要和 config 文件中定义的 Host 完全一致。

上述工作完成后,我们就可以在同一服务器上用 git 协议签出多个仓库了。