GitHub为什么推荐基于SSH的HTTPS?


334

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

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

...它说...

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

为什么推荐使用HTTPS?SSH方法中是否存在某种安全漏洞?还是速度较慢?我创建了SSH密钥,这样可以缓解任何安全问题吗?


39
更少的配置可能意味着更容易。此外,默认情况下,某些劣等操作系统甚至没有安装SSH客户端。
katspaugh 2012年

45
对于发现此线程的未来用户:GitHub已更改其策略,现在说:“我们强烈建议在与GitHub交互时使用SSH连接。”
beardedlinuxgeek 2014年

9
@StevePomeroy,我认为该位置不存在“强烈推荐”的语句。
Noel Abrahams 2014年

5
@BonsaiOak它曾经是网页史蒂夫波默罗伊链接到- web.archive.org/web/20140321204642/https://help.github.com/... -但它看起来像他们改变了它自那以后。
beardedlinuxgeek

5
@ br3nt对。他们过去不推荐它。然后他们做到了。然后他们再也没有。这就是为什么我的链接指向archive.org页面的原因
beardedlinuxgeek

Answers:


192

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存储库URL时有效。如果改用SSH存储库URL,则使用SSH密钥进行身份验证。虽然我们不建议您这样做,但是如果您希望使用此方法,请查阅本指南以获取有关生成和使用SSH密钥的帮助。


52
嗯,所以他们只是推荐HTTPS而不必编写文档ssh-agent?很公平。谢谢!
sarnold 2012年

74
@sarnold这可能与与ssh-agent和公钥管理有关的问题数量以及允许出站HTTP / HTTPS但不允许SSH的公司防火墙的数量有关。
Todd A. Jacobs 2012年

7
我认为https可以使人们更容易上手,因为您不必完成整个生成/复制/粘贴ssh密钥业务。从Github的角度来看,它也可以被视为更安全,因为获得了ssh密码(或发现您打开的计算机终端)的攻击者仍然必须知道您的Github密码才能进行推送。
k107 2012年

4
@kristi如果攻击者在密码缓存过期之前找到了该终端,即使他不知道密码,他是否仍可以继续推送?如果使用ssh-agent,问题也差不多,明显的区别是您必须输入ssh密钥的密码而不是github密码(并且似乎没有明显的缓存过期设置)。输入github密码而不是ssh密钥密码的想法似乎倒退了一步,尽管这很小,因为两个密钥为您提供的功能几乎相同。
HalilÖzgür2012年

8
我认为这几乎完全是关于减少他们获得的支持查询的数量。我想您也可能会争辩说,由于无论如何必须通过HTTPS输入密码才能访问网站,因此不能通过使用其他身份验证机制(SSH密钥)来提高安全性,但是可能是在增加攻击面,可能会降低安全性。如果正确使用HTTPS和SSH,也应该足够安全。
Cartroo

52

我认为GitHub推荐使用HTTPS的原因有很多

1)在任何地方使用都更简单,因为您只需要您的帐户详细信息(不需要SSH密钥)

2)HTTPS是在所有防火墙中打开的端口。SSH并不总是作为与外部网络通信的端口而开放

因此,使用HTTPS比使用SSH可以更广泛地访问GitHub存储库。

在我看来,SSH密钥值得在创建它们方面进行一些额外的工作

1)SSH密钥不提供对GitHub帐户的访问权限,因此,如果密钥被盗,则无法劫持您的帐户,

2)对您的SSH密钥使用强密钥短语可以限制任何误用,即使您的密钥被盗了

如果您的GitHub帐户凭据(用户名/密码)被盗,则可以更改GitHub密码以阻止您访问,并且可以快速删除所有共享存储库。

如果私钥被盗,则有人可以强行推动一个空的存储库并清除您拥有的每个存储库的所有更改历史记录,但无法更改GitHub帐户中的任何内容。如果您可以访问自己的GitHub帐户,那么尝试从这种违反情况中恢复将更加容易。

我的首选是将SSH与密码保护的密钥一起使用。我为每台计算机使用了不同的SSH密钥,因此,如果该计算机被盗或密钥被盗用,我可以快速登录GitHub并删除该密钥以防止不必要的访问。

如果您所在的网络阻塞了SSH端口,则可以通过HTTPS建立SSH隧道。

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

如果您使用HTTPS,建议您添加两因素身份验证,以保护您的帐户和存储库。

如果将HTTPS与工具(例如,编辑器)一起使用,则应使用GitHub帐户中的开发人员令牌,而不是在该工具配置中缓存用户名和密码。


3
“尽管有人确实掌握了您的私钥,但他们可以强行推入一个空的存储库并清除您的更改历史记录” –是的(而且会很糟糕),但是分布式代码库的美妙之处使我们可以与那些至少有一个副本。
卡梅伦

我不确定是否可以强制推送是SSH和HTTPS的区别。如果我有您的用户名和密码,我同样可以强制推送。
马特·坎蒂

如果您有用户名和密码,则可以删除所有内容(当然,在更改密码和电子邮件联系方式之后)。如果您只需删除它们,则无需对每个存储库进行单独的强制推送。
jr0cket

您正在比较密码与ssh密钥,而https连接需要特殊令牌。
Alexey Sh。

13

要么您引用的是错误的,要么github在不同的页面上有不同的建议,否则他们可能会随着时间的推移而学习并更新他们的记录。

与GitHub互动时,我们强烈建议使用SSH连接。SSH密钥是一种无需信任密码即可识别受信任计算机的方法。以下步骤将引导您生成SSH密钥,然后将公共密钥添加到您的GitHub帐户。

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


22
FWIW,此页面不再包含此答案中引用的“强烈推荐”文本。
Scott Isaacs 2015年

在以下链接中,HTTPS仍使用“推荐”:help.github.com/articles/which-remote-url-should-i-use/… “使用HTTPS URL克隆(推荐)”
JBE

10

如果防火墙阻止了通过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.

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

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

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

Host github.com
  Hostname ssh.github.com
  Port 443

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

$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

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


9

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

编辑:

似乎不再必须具有对公共存储库的写访问权才能使用SSH URL,从而使我的原始解释无效。

原版的:

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

鼓励使用SSH URL部署到生产服务器,但是-大概这里的上下文是诸如Heroku之类的服务。


1
“这些URL通过SSH提供对git存储库的访问。要使用这些URL,您必须具有对公共存储库的写访问权或对私有存储库的任何访问权。这些URL不适用于您没有写访问权的公共存储库“ - 这不是真的。任何人都可以克隆一个公共回购与SSH的网址,他们没有写访问
山姆

1
@Sam可能不再是正确的了,但是当我回答问题时是正确的。我已经编辑了答案以反映更改。
Mark Tye 2013年

确实。“ GitHub如何推荐基于SSH的HTTPS”这个问题是毫无意义的。
Mark Tye 2013年

0

可能会争辩说,使用SSH密钥进行身份验证的安全性较差,因为与生成新的SSH密钥相比,我们倾向于更定期地更改密码。

限制SSH密钥寿命的服务器可以帮助迫使用户进行定期刷新SSH密钥的实践。


现在认为使用户定期更改密码是不明智的建议。英国政府认为:ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb

-3

也许是因为从大脑窃取密码然后从计算机窃取密钥文件更难(至少据我所知,也许已经存在某些物质或方法,但这是一个无限的讨论)?并且,如果您使用密码保护密钥,那么您将再次使用密码,并且会出现相同的问题(但有些人可能会辩称您必须做更多的工作,因为您需要先获取密钥然后再破解密码)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.