我有一个项目,在私有Git存储库上有Node依赖项。我需要能够在不提示输入密码或允许SSH连接的情况下运行npm install
,所以我使用的是我在package.json中在GitHub上创建的访问令牌:
"dependencies": {
"sass-theme": "git+https://[token]:x-oauth-basic@github.com/MyOrg/sass-theme.git#v1.0.2",
"node-sass": "^4.5.0"
}
这个项目与其他几十个人共享,所以显然我不想将我的令牌保留在源代码管理中。我知道我可以在GitHub上创建只读部署密钥,但我相信这需要其他开发人员导入SSH密钥以在本地构建项目。
是否可以创建一个可以共享但具有克隆存储库的只读访问权限的访问令牌?
答案 0 :(得分:5)
部署密钥是必经之路。默认情况下,它们不允许写访问,并且它们的范围仅限于特定的存储库(与 GitHub 个人访问令牌不同)。因此,您现在可以生成一个私钥/公钥对,在 GitHub 的单个存储库中将其中一个设置为只读/仅拉取部署密钥,并在您的 CI 中使用私钥。
例如运行一个 bash 脚本:
eval "$(ssh-agent -s)";
ssh-add <your private deploy key>;
现在您的 CI 有权在构建期间访问私有存储库。
您可以通过转到您在 Github 上的存储库,然后单击设置 > 部署密钥 > 添加部署密钥>
答案 1 :(得分:4)
我能想到创建一个提供对私有仓库的只读访问权限的令牌的最简单的方法是
最好不要对其他orgs / repos进行其他repo访问,因为该范围基本上可以完全控制用户控制的任何repos。
我知道在企业解决方案中,我们可能会使用系统ID,但我不确定github.com实际上可以使用哪种类型的用户帐户,但我会先检查服务条款。
答案 2 :(得分:1)
如果您认为将凭据放入源代码中是一个坏主意(正如您所希望的那样!)那么您几乎没有选择:
将其托管在私人GitHub仓库中,但将其他数十人作为协作者添加到此仓库(具有只读访问权限)。
将其托管在私有GitHub仓库中,但作为一个组织拥有,并将这些人员添加到组织中。
将其发布为私人npm模块。
将其发布到私人npm注册表中。
将依赖项包含在需要它的程序的源代码中。
最后一个基本上就像在原始代码中包含使用该模块的node_modules
,所以当然它并不漂亮。托管您自己的npm注册表并非易事,但您可以通过这种方式自动添加用户。发布私有npm模块不是免费的。维护一个充满了应该能够访问您的回购的人的组织是令人讨厌的。
请记住一件事:如果您与多个人共享您的凭据,希望每个人最终都能访问它,这只是时间问题。凭证可能具有有限的范围,它可以是只读部署密钥或具有受限访问权限的计算机用户,但如果它是分布式的,它最终会像往常一样泄漏,尤其是当您与数十人共享时。保留可以访问代码的人员列表要好得多,并且您可以使用GitHub API自动保持该列表的最新状态。
我绝不会建议在项目的源代码中分发凭据,无论这些凭据提供的访问权限有多少。