为什么我需要SSH授权才能克隆一个公开可用的Git仓库?

时间:2014-10-01 14:59:19

标签: git github ssh bitbucket

在BitBucket和GitHub上,除非授权SSH密钥,否则无法通过Git / SSH协议克隆公共存储库[1]。你可以通过HTTPS克隆它们 - 你只是不会'有推送权限。为什么是这样?服务器无法记录"使用SSH密钥X的用户克隆了这个仓库,但没有推送访问权限"?

这是Git + SSH的限制,BitBucket特定设置的限制,还是完全有效的设计决策?

[1]道歉,如果我弄错了,但我无法通过BitBucket的网络界面看到改变这种情况的方法。

3 个答案:

答案 0 :(得分:1)

可以通过SSH克隆Git存储库,甚至拥有 SSH密钥。

我怀疑您将服务器 SSH密钥与您自己的密钥混淆。第一次通过SSH连接到任何计算机时,您将看到with a message like this

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?

这是为了验证您是否已连接到正确的服务器,并确保没有man-in-the-middle attack正在进行。它与GitHub和/或Bitbucket允许的内容或Git几乎没有关系;它是SSH安全模型的重要组成部分。

您应该验证指纹是否与one published by GitHub一次匹配,然后键入yes。您的机器将记住指纹已被接受用于将来的转换。

答案 1 :(得分:0)

您的客户端可以有多个SSH密钥。例如,当您生成不同的私钥/公钥以访问不同的服务器时就是这种情况。

此外,(即使很少),可以在不同的客户端之间共享相同的SSH密钥。

答案 2 :(得分:0)

SSH实际上是作为让远程用户登录系统并通过它提供Git repos(使用虚拟用户)的设备创建的,实际上是一种破解(无论多么聪明)。

从理论上讲,有可能配置SSH服务器,底层系统以及在SSH后面提供服务的Git服务(例如你提到的服务肯定不会直接通过SSH服务Git,并且本着{ {1}})但我认为人们很少需要这个。为什么?因为如果您可以对任何人进行存储库的读访问,那么您将不需要任何身份验证,并且可能只使用本机Git有线协议(URI中的gitolite)或HTTP [S]来提供身份验证。 ]

请注意,Git支持使用不同的URL来推送和获取同一个遥控器,因此你可以这样做:

git://

现在提取将使用HTTPS协议,推送将通过SSH并需要授权私钥。