为什么GitHub推荐使用SSH over SSH?

Joh*_*ore 309 git ssh https github

在GitHub网站上有一个链接......

https://help.github.com/articles/generating-ssh-keys

......它说......

如果您决定不使用推荐的HTTPS方法,我们可以使用SSH密钥在您的计算机和GitHub之间建立安全连接.以下步骤将指导您生成SSH密钥,然后将公钥添加到您的GitHub帐户.

为什么HTTPS是推荐的方法?SSH方法中是否存在某种安全漏洞或者速度较慢?我创建了一个SSH密钥,这样可以减轻任何安全问题吗?

k10*_*107 175

GitHub多次改变了他们的推荐(例子).

看起来他们目前推荐使用HTTPS,因为它最容易在最广泛的网络和平台上进行设置,并且对于所有这些人都是新用户.

SSH中没有固有的缺陷(如果它们已禁用它) - 在下面的链接中,您将看到它们仍然提供有关SSH连接的详细信息:

  1. HTTPS不太可能被防火墙阻止.

    https://help.github.com/articles/which-remote-url-should-i-use/

    https://克隆URL可在所有存储库(公共和私有)上使用.这些URL可以在任何地方使用 - 即使您位于防火墙或代理之后.

  2. HTTPS连接允许credential.helper缓存您的密码.

    https://help.github.com/articles/set-up-git

    很高兴知道:凭证助手仅在克隆HTTPS repo URL时有效.如果您使用SSH repo URL,则使用SSH密钥进行身份验证.虽然我们不建议使用此方法,但如果您希望使用此方法,请查看本指南以获取有关生成和使用SSH密钥的帮助.

  • @sarnold它可能更多地涉及与ssh-agent和公钥管理相关的问题量,以及允许出站HTTP/HTTPS但不允许SSH的公司防火墙的数量. (73认同)
  • 啊,所以他们推荐HTTPS只是为了让他们不必记录`ssh-agent`?很公平.谢谢! (50认同)
  • 我认为这几乎完全是为了减少他们获得的支持查询量.我想你也可以争辩说,既然你*要通过HTTPS输入你的密码来访问网站,你就不能通过使用不同的身份验证机制(SSH密钥)来增加*安全性,但可行的是你在增加攻击面可能*降低*安全性.如果使用得当,HTTPS和SSH仍然应该足够安全. (8认同)
  • 我认为https使人们更容易上手,因为您不必完成整个生成/复制/粘贴ssh密钥业务.从Github的角度来看,它可以被视为更安全,因为攻击者获得了你的ssh密码(或者你发现你打开的计算机终端)仍然需要知道你的Github密码才能推送任何东西. (7认同)
  • @kristi如果攻击者在密码缓存过期之前发现该终端,即使他不知道密码,他仍然不能推送吗?如果你使用ssh-agent,问题是一样的,明显不同的是你必须输入ssh密码的密码而不是你的github密码(并且似乎没有明显的缓存过期设置).输入github密码而不是ssh密码密码的想法似乎是一个倒退,虽然是一个小的,因为两把钥匙给你的力量是相同的AFAIK. (4认同)
  • @kristi他们创建了凭证帮助程序,以便更好地支持https.这并没有回答*为什么*首先Github更喜欢https到ssh. (2认同)

jr0*_*ket 44

GitHub建议使用HTTPS,因为它是在所有防火墙中都打开的端口.SSH并不总是作为网络上的通信端口打开,并且经常被网络防火墙阻止.

因此,使用HTTPS而不是SSH可以更普遍地访问GitHub存储库.

SSH密钥更安全,因为它们不提供对您的GitHub帐户的访问权限,但如果有人确实抓住了您的私钥,他们可以强制推送空存储库并清除您的更改历史记录.

我的偏好是使用带密码保护密钥的SSH.如果您所在的网络阻止SSH端口,则可以通过HTTPS进行隧道连接.

https://help.github.com/articles/using-ssh-over-the-https-port/

如果您使用HTTPS,我建议您添加双因素身份验证,以保护您的帐户以及您的存储库.

  • “尽管有人确实掌握了您的私钥,但他们可以强行推入一个空的存储库并清除您的更改历史记录” –是的(而且会很糟糕),但是分布式代码库的美丽之处使我们可以与那些至少有一个副本。 (3认同)
  • 我不确定能否强制推送是 SSH 和 HTTPS 之间的区别。如果我有你的用户名和密码,我同样可以强制推送。 (2认同)
  • 如果您有用户名和密码,您可以删除所有内容(当然在更改密码和电子邮件联系方式之后)。如果您可以删除它们,则无需对每个存储库进行单独的强制推送。 (2认同)

Sid*_*ati 13

要么你引用错误,要么github在不同的页面上有不同的推荐,或者他们可能会随着时间的推移学习并更新他们的回复.

我们强烈建议在与GitHub交互时使用SSH连接.SSH密钥是一种识别可信计算机的方法,不涉及密码.以下步骤将指导您生成SSH密钥,然后将公钥添加到您的GitHub帐户.

https://help.github.com/articles/generating-ssh-keys

  • FWIW,此页面不再包含此答案中引用的"强烈推荐"文字. (22认同)
  • 现在他们完全删除了这句话。 (2认同)

Mar*_*Tye 9

另请参阅:官方应该使用哪个远程URL?在help.github.com上回答.

编辑:

似乎不再需要对公共存储库进行写访问以使用SSH URL,从而使我的原始解释无效.

原版的:

显然,支持HTTPS URL的主要原因是,如果您没有对该repo的写访问权限,则SSH URL将无法与公共存储库一起使用.

鼓励使用SSH URL来部署到生产服务器,但是 - 这里的上下文可能是像Heroku这样的服务.

  • “这些 URL 提供了通过 SSH 访问 git 存储库的权限。要使用这些 URL,您必须具有对公共存储库的写入权限或对私有存储库的任何访问权限。这些 URL 不适用于您没有写入权限的公共存储库“ - 这不是真的。任何人都可以使用他们没有写访问权限的 SSH url 克隆公共存储库 (2认同)

mja*_*mja 8

如果防火墙阻止了通过HTTPS启用SSH连接

测试是否可以通过HTTPS端口进行SSH,请运行以下SSH命令:

$ ssh -T -p 443 git@ssh.github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
Run Code Online (Sandbox Code Playgroud)

如果可行,那就太好了!如果没有,您可能需要遵循我们的故障排除指南

如果您能够git@ssh.github.com通过端口SSH进入443,则可以覆盖SSH设置,以强制通过该服务器和端口的GitHub连接得以运行。

要在ssh配置中进行设置,请在处编辑文件~/.ssh/config,然后添加以下部分:

Host github.com
  Hostname ssh.github.com
  Port 443
Run Code Online (Sandbox Code Playgroud)

您可以通过再次连接到GitHub来测试它是否有效:

$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
Run Code Online (Sandbox Code Playgroud)

身份验证到GitHub /通过HTTPS端口使用SSH