如何在一个服务器上配置多个 github 仓库 deploy keys

如果您是一个github的使用者,那么你一定会接触到deploy key。github 使用 deploy key 来进行权限认证,被授予的机器才能有读或读写的能力。

如果你的server上只部署一个app的话,那用起来就很简单:

  1. 通过 ssh-keygen 命令生成rsa凭证到 .ssh/ 文件夹下
  2. 拷贝对应的公钥文件内容
  3. 进入 github 项目 Settings 中,选择左边栏 Deploy keys
  4. 点击 Add deploy keys,复制进去即可。

但是问题来了,如果你有多个项目部署在一个 server 上,如果使用同一个 ssh key,github 就会阻止,无法允许同样的 key 用于不同的项目,github 中一个 key 只能用来部署一个项目,这应该是出于安全的考虑。

那么,一个服务器上大多数情况下不可能只部署一个项目,遇到这种需求,要怎么做呢?

解决方案

官方也是给了解决方案的:

大致的方案是为每个存储库生成一个专用密钥对,在服务器的 SSH 配置文件(通常是~/.ssh/config)中,为每个存储库添加一个别名条目。

操作流程

1.选择一个目录,用于 git 项目 key 存储,比如 /home/user/.ssh/deploy/

2.为每个项目单独生成密钥,如下:

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/deploy/id_rsa_projecta
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/deploy/id_rsa_projecta
Your public key has been saved in /root/.ssh/deploy/id_rsa_projecta.pub
The key fingerprint is:
SHA256:TBeANn8XdDr/P7AljDf7hHvntleZTMlfJItEGZUkDCM root@host
The key's randomart image is:
+---[RSA 3072]----+
|       .E.+===+. |
|      +  . o=+o .|
|     . o. ..oo.+.|
|       o... oo.+.|
|        S. .o + =|
|           . *.*o|
|            ..B.o|
|             ooo=|
|             .o=B|
+----[SHA256]-----+

这样你就有了为项目单独生成的秘钥。

3.将生成的公钥添加到 github 项目的 deploy keys 中。

4.在 .ssh/ 文件夹下创建 config 文件,加入如下配置:

Host projecta
HostName github.com
User git
IdentityFile /home/.ssh/deploy/id_rsa_projecta

Host projecta 存储库的别名。
Hostname github.com 配置与别名一起使用的主机名。
IdentityFile=/home/user/.ssh/id_rsa_projecta 为别名分配私钥。

5.测试

ssh -vT projecta
添加新评论