单机进行Github多账户多项目管理

在 Github 创建了多个仓库,并为每个仓库使用了独立的 deploy key,结果在进行 git push 操作时,提示没有权限。错误信息类似:

ERROR: Permission to quyun/php-backend.git denied to quyun/aliyun-api-tools

官方的帮助中有提到这个错误:

https://help.github.com/articles/error-permission-to-user-repo-denied-to-user-other-repo

不过对于许多应用场景,使用一个全局的 key 并不能满足要求。

简单分析下,我们可以发现 ssh 客户端是通过类似:

git@github.com:quyun/aliyun-api-tools.git

这样的 git 地址中的 user 和 host 来识别使用哪个本地私钥的。

很明显,如果 user 和 host 始终为 git 和 github.com,那么就只能使用一个私钥。

指定私钥的方式也很简单,编辑 ~/.ssh/config,添加类似如下配置即可:

Host php-backend.github.quyun.net
IdentityFile ~/.ssh/github-php-backend
User git

Host aliyun-api-tools.github.quyun.net
IdentityFile ~/.ssh/github-aliyun-api-tools
User git

配置格式很简单,不多做解释。

光是这样指定当然不够,你会发现我这里的 host 已经不是 github.com 了。
我为每个仓库使用了自己的 host,每个 host 的域名做 CNAME 解析到 github.com,这样 ssh 在连接时就可以区别不同的仓库了。

来测试下:

# ssh -T git@php-backend.github.quyun.net
Hi quyun/php-backend! You’ve successfully authenticated, but GitHub does not provide shell access.

# ssh -T git@aliyun-api-utils.github.quyun.net
Hi quyun/aliyun-api-tools! You’ve successfully authenticated, but GitHub does not provide shell access.

可以看到 ssh 已经能够根据不同 host 使用不同私钥了。

最后,将你的 git 仓库地址中的 host 改为新设置的 host 即可,如上面的:

git@github.com:quyun/aliyun-api-tools.git

改为:

git@aliyun-api-tools.github.quyun.net:quyun/aliyun-api-tools.git

在 windows 下也会出现这个问题,用同样的方式解决即可!