两个本地Git帐户,使用SSH -帐户A可以提交到帐户B的私有存储库

jgovgodb  于 2023-04-04  发布在  Git
关注(0)|答案(1)|浏览(99)

所以,我有两个Git帐户,(分别称为A和B),它们都有自己的私有仓库。让我们为每个git用户的私有仓库分别命名为A1和B1。
我在PC上为两个账户设置了SSH,并将它们添加到我的git客户端Git-fork。
我克隆了存储库,然后为每个存储库专门设置用户,而不是全局用户。
我不小心将帐户A设置为帐户B存储库的用户-我以为它不会让我提交,但它工作得很好。
我如何在将来防止这种情况,只有私有回购的所有者才能推送到他们的回购?
我确保生成的SSH密钥与每个github帐户正确配对-它必须是我桌面上的一个设置,但不确定是什么?
请参阅所附的图像enter image description here,其中显示了两个帐户提交到OWlB的私人存储库。
有没有一个简单的安全功能来阻止这种情况?我认为这是因为git gui客户端没有区分我用于提交的用户隐藏电子邮件之间的SSH密钥-这可能是SSH生成中的错误吗?
这是在Windows上使用Git-fork。我已经为远程设置了别名以匹配用户的SSH密钥,但无法通过Git-Fork克隆URL。不确定这是否会解决提交到特定分支的问题。

xdnvmnnf

xdnvmnnf1#

这里有两种不同的识别形式需要考虑:提交中的身份以及用于推送的凭证。
每次提交时,提交中都会记录一个人的名字(不是用户名)和电子邮件,通常是基于Git配置值user.name(个人名字)和user.email(电子邮件)。实际上,记录了两个:一个用于作者(创建更改的人),一个用于提交者(提交的人)。一旦提交完成,这些数据就被嵌入,更改它的唯一方法是用新的提交替换该提交。
当您使用SSH将提交推送到GitHub时,您的授权基于您的SSH公钥。您使用的密钥与用户帐户或存储库相关联,在后一种情况下,我们称之为部署密钥。用户帐户或存储库以及与密钥相关联的权限决定可以访问哪些存储库。
然而,当你推送提交时,你可以为任何用户推送提交。这是设计的,因为像Git这样的项目接受来自许多作者的补丁,而这些补丁都是由一个人,即维护者提交的。如果你不能推送其他人的提交,那么采用这种工作流程将非常困难,而且也不可能推送现有仓库的新副本。
在你的例子中,你用两个不同的身份提交到了同一个仓库,所以这两个身份都在历史记录中。然后你用所有者的密钥推送了这个历史记录,这样这些提交就被上传了。
GitHub的配置中没有选项来禁用将任意提交推送到存储库的功能,因为它通常没有用处。GitHub确实允许用户通过要求提交签名来禁止伪造,但这对你的情况没有帮助,因为你有两个用户的凭据。我不允许多个免费帐户,通常公司贡献者要求员工使用公司机器(从而避免此问题),因此这不是一个倾向于得到良好支持的场景。
你可以使用一个pre-push钩子来遍历历史并拒绝错误用户的提交。(.git/hooks/pre-push.sample)。这将打印作者和提交者的电子邮件,然后如果它有你不喜欢的值,你可以拒绝提交。但是,--no-verify仍然可以悄悄地绕过这一点。

相关问题