我有一个依赖于几个私有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帐户访问存储库的用户使用。
我如何让钥匙工作?
2条答案
按热度按时间nuypyhwy1#
如果你想为不同的github账户使用不同的key,你需要使用配置文件中定义的别名来修改git url,比如:
字符串
ilmyapht2#
如果有人沿着来回答这个问题:
重要的是要注意@Kitanotori对@Jakuje的回答的评论,你必须在每个开发人员的计算机上设置自定义ssh配置,这是一个烦人的额外步骤。
我决定解决这个问题的方法是使用
GIT_SSH_COMMAND
环境变量。对于本地开发,每个开发人员都应该对自己的Github帐户具有SSH读写访问权限,因此运行npm install应该没有问题,并且ProjectB和ProjectC都将成功下载。
对于部署,我们希望使用部署密钥而不是任何一个开发人员的个人密钥。
这里有一个技巧:将ProjectB和ProjectC都放入ProjectA的package.json的可选目录中
在部署脚本中,运行
字符串
这将安装除个人Github依赖项(ProjectB和ProjectC)之外的所有依赖项。
然后运行:
型
然后,
型
对于ProjectC:
型
现在您的
node_modules
文件夹将包含您部署的所有依赖项!需要注意的是,通常
package-lock.json
文件中保存的提交与外部git依赖最近安装的提交完全相同,并且无论package-lock.json
文件如何,此方法都会安装最近的提交。您可能需要根据需要调整此方法。