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

时间:2012-06-14 21:37:27

标签: git github ssh https

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

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

......它说明......

  

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

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

7 个答案:

答案 0 :(得分:159)

GitHub已多次更改推荐(example)。

他们目前推荐使用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时有效   回购网址。如果您使用SSH repo URL,则使用SSH密钥   认证。虽然我们不推荐它,但如果你想使用它   方法,请查看本指南以获取有关生成和使用SSH密钥的帮助。

答案 1 :(得分:32)

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

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

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

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

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

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

答案 2 :(得分:11)

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

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

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

答案 3 :(得分:8)

另见:help.github.com上的官方Which remote URL should I use?答案。

修改

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

原文:

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

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

答案 4 :(得分:4)

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

如果有效,那太好了!如果没有,您可能需要关注我们的troubleshooting guide

如果您能够通过端口 443 SSH到git@ssh.github.com,则可以覆盖您的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.

来自Authenticating to GitHub / Using SSH over the HTTPS port

答案 5 :(得分:0)

有可能认为使用SSH密钥进行身份验证的安全性较低,因为我们倾向于更频繁地更改密码而不是生成新的SSH密钥。

限制其给予SSH密钥的生命周期的服务器可以帮助强制用户定期刷新SSH密钥。

答案 6 :(得分:-3)

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