如果您是一个github的使用者,那么你一定会接触到deploy key。github 使用 deploy key 来进行权限认证,被授予的机器才能有读或读写的能力。
如果你的server上只部署一个app的话,那用起来就很简单:
- 通过 ssh-keygen 命令生成rsa凭证到 .ssh/ 文件夹下
- 拷贝对应的公钥文件内容
- 进入 github 项目 Settings 中,选择左边栏 Deploy keys
- 点击 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