【问题标题】:Why do I need SSH authorisation to clone an openly-available Git repo?为什么我需要 SSH 授权才能克隆公开可用的 Git 存储库?
【发布时间】:2014-10-02 03:57:44
【问题描述】:

在 BitBucket 和 GitHub 上,您无法通过 Git/SSH 协议克隆公共存储库,除非您的 SSH 密钥已获得授权 [1]。你可以通过 HTTPS 克隆它们——你只是没有推送访问权限。为什么是这样?服务器不能只记录“具有 SSH 密钥 X 的用户克隆了这个 repo 但没有推送访问权限”吗?

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

[1] 如果我弄错了,我深表歉意,但我无法通过 BitBucket 的 Web 界面更改此设置。

【问题讨论】:

  • ssh 是一个明显的攻击目标,因此允许匿名 ssh 访问是不谨慎的。而匿名 HTTP 是常态。

标签: git github ssh bitbucket


【解决方案1】:

即使拥有 SSH 密钥,也可以通过 SSH 克隆 Git 存储库。

我怀疑您将 server 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。您的机器会记住指纹已被接受以供将来的交易使用。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      SSH 实际上是作为一种让远程用户登录系统并通过它(使用虚拟化用户)提供 Git 存储库的设备而创建的,这确实是一种 hack(无论它多么聪明)。

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

      请注意,Git 支持使用不同的 URL 来推送和获取同一个遥控器,因此您可以执行以下操作:

      git clone https://git-hoster.example.com/user/repo.git
      cd repo
      git remote set-url --push origin ssh://git@git-hoster.example.com/user/repo.git
      

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

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        相关资源
        最近更新 更多