您引用的解决方法(创建单个“构建”用户,或在id_rsa.REPONAME.pub
每个仓库共享相同用户)说明的唯一原因是:
避免为不同的用户共享公钥/私钥
即使您的情况并非如此(构建多个项目),但允许重用相同的 ssh 密钥将为两个不同的用户共享相同的 ssh 密钥提供可能性,这将破坏身份验证目的。
身份验证意味着:
“使用某个 ssh 密钥应该意味着您应该知道谁在使用它”。
GitHub 页面“管理部署密钥”详细介绍了使用 ssh 的各种帐户:
SSH 代理转发:当您通过 SSH 连接到服务器并运行 git 命令时,代理转发使用已在本地开发机器上设置的 SSH 密钥。
您可以有选择地让远程服务器访问您的本地 ssh-agent,就好像它在服务器上运行一样。
因此无需在服务器上复制您的私钥。
机器用户:(这是“虚拟帐户”策略)将密钥附加到用户帐户。由于此帐户不会被人类使用,因此称为机器用户。
你会像对待人类一样对待这个用户,将密钥附加到机器用户帐户,就好像它是一个普通帐户一样。
授予帐户协作者或团队访问其需要访问的存储库的权限。
因此,一个私钥关联到一个“机器用户”,每个服务器一个。
(DHa在评论中指出了部署密钥限制数,以及您只能拥有一个机器用户帐户的事实)
- 部署密钥(每个 GitHub 存储库一个)存储在服务器上并授予对 GitHub 上单个存储库的访问权限的 SSH 密钥。
此密钥直接附加到存储库而不是用户帐户。
无需转到您的帐户设置,而是转到目标 repo 的管理页面。
转到“ Deploy Keys
”并单击“ Add deploy key
”。粘贴公钥并提交。
这一次,ssh 密钥没有附加到用户(您可以授予对多个存储库的访问权限),而是附加到一个存储库。
授予多个repo 的 ssh 访问权限相当于“机器用户”。
在认证方面:
- 当用户完成时,对多个存储库使用相同的密钥是可以的(已经说过与他/她的帐户相关联的密钥)
- 当密钥由存储库附加时,对多个存储库使用相同的密钥是不行的,因为您根本不知道谁访问了什么。
这与“机器用户”不同,其中“用户”被声明为许多 repo 的协作者。
在这里(部署密钥),没有“合作者”,只是授予 repo 的直接 ssh 访问权限。
Yusuf Bhabhrawala在评论中进一步说明了这种模型限制:
考虑这些非常合理的用例——使用私有 pip 模块的 python 项目或使用私有 npm 包的节点项目——两者都来自同一组织中的另一个 repo。
目前无法使用部署密钥或帐户密钥(这会暴露太多其他存储库)来部署这个非常简单的用例。
Chris Stenkamp指出“如何发现 ' pip install git+ssh://...
' 在哪里搜索 ssh 密钥? ”,其中涉及设置 GIT_SSH_COMMAND
环境变量。