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

问题描述 投票:0回答:2

我有一个 npm 项目,它依赖于几个私有 Github 存储库。我正在临时服务器上部署该项目,并且为每个私有存储库设置了单独的部署密钥,因为 Github 不允许每个私有存储库使用相同的密钥。我已经像这样设置了〜/.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 帐户访问存储库的用户也可以使用这些项目。

如何让钥匙正常工作?

git github ssh npm yarnpkg
2个回答
0
投票

如果你想为不同的github帐户使用不同的密钥,则需要使用配置文件中定义的别名来修改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"

0
投票

如果稍后有人提出这个问题:

重要的是要注意 @Kitanotori@Jakuje 的回答的评论,您必须在每个开发人员的计算机上设置自定义 ssh 配置,这是一个烦人的额外步骤。

我决定解决这个问题的方法是使用

GIT_SSH_COMMAND
环境变量。

假设一个节点项目位于存储库中:ProjectA 假设另外两个项目位于自己的存储库中:ProjectB 和 ProjectC 假设我们想要将 ProjectB 和 Project C 作为 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
文件如何,此方法都将始终安装最新的提交。您可能想根据您的需要调整此方法。

© www.soinside.com 2019 - 2024. All rights reserved.