如何设置多个Github部署密钥(npm,yarn)?

vpfxa7rd  于 2024-01-04  发布在  Git
关注(0)|答案(2)|浏览(137)

我有一个依赖于几个私有Github仓库的npm项目。我在staging服务器上部署项目,我为每个私有仓库设置了单独的deploy key,因为Github不允许每个仓库使用相同的key。我设置了~/.ssh/config如下:

Host 1.github.com
        HostName github.com
        User git
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/key-1
        StrictHostKeyChecking no

Host 2.github.com
        HostName github.com
        User git
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/key-2
        StrictHostKeyChecking no

Host 3.github.com
        HostName github.com
        User git
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/key-3
        StrictHostKeyChecking no

字符串
在package.json中,我有以下私有Github仓库依赖项:

"project1": "git+ssh://[email protected]/myorg/project1.git",
"project2": "git+ssh://[email protected]/myorg/project2.git",
"project3": "git+ssh://[email protected]/myorg/project3.git"


然而,这不起作用,我得到了Permission denied (publickey)错误。这些项目也被使用Github帐户访问存储库的用户使用。
我如何让钥匙工作?

nuypyhwy

nuypyhwy1#

如果你想为不同的github账户使用不同的key,你需要使用配置文件中定义的别名来修改git url,比如:

"project1": "git+ssh://[email protected]/myorg/project1.git",
"project2": "git+ssh://[email protected]/myorg/project2.git",
"project3": "git+ssh://[email protected]/myorg/project3.git"

字符串

ilmyapht

ilmyapht2#

如果有人沿着来回答这个问题:
重要的是要注意@Kitanotori对@Jakuje的回答的评论,你必须在每个开发人员的计算机上设置自定义ssh配置,这是一个烦人的额外步骤。
我决定解决这个问题的方法是使用GIT_SSH_COMMAND环境变量。

  • 假设一个节点项目位于存储库中:ProjectA
  • 假设还有两个项目位于它们自己的仓库中:ProjectB和ProjectC
  • 假设我们想要将ProjectB和ProjectC作为github托管的npm包导入ProjectA

对于本地开发,每个开发人员都应该对自己的Github帐户具有SSH读写访问权限,因此运行npm install应该没有问题,并且ProjectB和ProjectC都将成功下载。
对于部署,我们希望使用部署密钥而不是任何一个开发人员的个人密钥。
这里有一个技巧:将ProjectB和ProjectC都放入ProjectA的package.json的可选目录中
在部署脚本中,运行

npm ci --omit=optional

字符串
这将安装除个人Github依赖项(ProjectB和ProjectC)之外的所有依赖项。
然后运行:

export GIT_SSH_COMMAND='ssh -i pathToYourProjectBDeployKey'


然后,

npm i ProjectB


对于ProjectC:

export GIT_SSH_COMMAND='ssh -i pathToYourProjectCDeployKey'
npm i ProjectC


现在您的node_modules文件夹将包含您部署的所有依赖项!
需要注意的是,通常package-lock.json文件中保存的提交与外部git依赖最近安装的提交完全相同,并且无论package-lock.json文件如何,此方法都会安装最近的提交。您可能需要根据需要调整此方法。

相关问题