在BitBucket和GitHub上,除非授权SSH密钥,否则无法通过Git / SSH协议克隆公共存储库[1]。你可以通过HTTPS克隆它们 - 你只是不会'有推送权限。为什么是这样?服务器无法记录"使用SSH密钥X的用户克隆了这个仓库,但没有推送访问权限"?
这是Git + SSH的限制,BitBucket特定设置的限制,还是完全有效的设计决策?
[1]道歉,如果我弄错了,但我无法通过BitBucket的网络界面看到改变这种情况的方法。
答案 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并需要授权私钥。