为什么GitHub推荐HTTPS而不是SSH?

在GitHub网站上有一个链接…

https://help.github.com/articles/generating-ssh-keys < a href = " https://help.github.com/articles/generating-ssh-keys " > < / >

... 它说…

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

. key,然后将公钥添加到你的GitHub帐户

为什么推荐使用HTTPS ?SSH方法是否存在某种安全漏洞,或者它更慢?我创建了一个SSH密钥,那么这会减轻任何安全问题吗?

215710 次浏览

GitHub已经改变了他们的建议几次(例子)。

目前看来,他们之所以推荐HTTPS,是因为它是最容易在最广泛的网络和平台上设置的,而且对于那些刚接触这一切的用户来说也是如此。

SSH没有固有的缺陷(如果有的话,他们会禁用它)——在下面的链接中,你会看到他们仍然提供了SSH连接的详细信息:

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

    https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls

    不管可见性如何,https://克隆url在所有存储库上都可用。https://克隆url工作,即使你在防火墙或代理。

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

    https://docs.github.com/en/get-started/quickstart/set-up-git#connecting-over-https-recommended

    如果你使用HTTPS克隆,你可以使用凭证助手在Git中缓存你的GitHub凭证。有关更多信息,请参见"使用HTTPS url克隆"和“;在Git中缓存你的GitHub凭证。"

也可以在help.github.com上看到官方的我应该使用哪个远程URL ?答案。

编辑:

似乎不再需要对公共回购具有写访问权限才能使用SSH URL,这使得我最初的解释无效。

原:

显然,偏爱HTTPS URL的主要原因是,如果您没有对该回购的写访问权,SSH URL将无法与公共回购一起工作。

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

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

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

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

有人可能会说,使用SSH密钥进行身份验证不太安全,因为我们倾向于更定期地更改密码,而不是生成新的SSH密钥。

限制给定SSH密钥使用寿命的服务器可以帮助强制用户定期刷新SSH密钥。

我认为GitHub推荐HTTPS有几个原因

  1. 从任何地方访问存储库都更简单,因为您只需要您的帐户详细信息(不需要SSH密钥)就可以写入存储库。

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

因此,使用HTTPS比SSH更容易访问GitHub存储库。

在我看来,SSH密钥值得在创建它们时做一点额外的工作

  1. SSH密钥不提供访问您的GitHub帐户,所以如果您的密钥被盗,您的帐户不能被劫持。

  2. 使用强关键字与您的SSH密钥限制任何滥用,即使您的密钥被盗(在第一次打破对您的计算机帐户的访问保护后)

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

如果私钥被盗,有人可以强制推送空存储库,并清除您拥有的每个存储库的所有更改历史,但不能更改您GitHub帐户中的任何内容。如果你可以访问你的GitHub帐户,尝试从这个漏洞中恢复将会容易得多。

我的首选是使用带有密码短语保护密钥的SSH。我对每台计算机都有不同的SSH密钥,所以如果这台计算机被盗或密钥被泄露,我可以快速登录到GitHub并删除密钥以防止不必要的访问。

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

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

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

如果你使用工具(如编辑器)使用HTTPS,你应该使用你的GitHub帐户的开发人员令牌,而不是在工具配置中缓存用户名和密码。令牌可以减轻使用HTTPS的一些潜在风险,因为令牌可以配置为非常特定的访问特权,如果令牌受到损害,则很容易被撤销。

如果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.

如果成功了,那太好了!如果不是,你可能需要遵循我们的故障排除指南

如果你能够通过端口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.

通过HTTPS端口SSH认证到GitHub

支持HTTPS的另一个原因是,如果多个用户在中央服务器(比如开发机器)上管理代码,那么每个用户都需要创建自己的ssh密钥才能使用基于ssh的连接。如果连接是HTTPS,则此问题不存在。

我猜你可能会说,设置自己的密钥作为使用存储项目的服务器的一部分并不是那么困难,但这是完成工作的进一步障碍。