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

6za6bjd0  于 2023-04-28  发布在  Git
关注(0)|答案(8)|浏览(114)

在GitHub网站上有一个链接。..
https://web.archive.org/web/20130114042103/https://help.github.com/articles/generating-ssh-keys
……上面说。..
如果您决定不使用推荐的HTTPS方法,我们可以使用SSH密钥在您的计算机和GitHub之间建立安全连接。下面的步骤将引导您生成SSH密钥,然后将公钥添加到您的GitHub帐户。
为什么HTTPS是推荐的方法?SSH方法中是否存在某种安全漏洞或速度较慢?我创建了一个SSH密钥,这会减轻任何安全问题吗?

xlpyo6sf

xlpyo6sf1#

GitHub已经多次更改了他们的建议(example)。
看来他们目前推荐HTTPS,因为它是最容易在最广泛的网络和平台上设置的,并且由新手使用。
SSH没有固有的缺陷(如果有,他们会禁用它)-在下面的链接中,您将看到他们仍然提供有关SSH连接的详细信息:

  1. HTTPS不太可能被防火墙阻止。
    www.example. com
    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克隆”和“Caching your GitHub credentials in Git.
5lwkijsr

5lwkijsr2#

我假设GitHub出于几个原因推荐HTTPS
1.从任何地方访问存储库都更简单,因为您只需要您的帐户详细信息(不需要SSH密钥)即可写入存储库。

  1. HTTPS是在所有防火墙中打开的端口。SSH并不总是作为与外部网络通信的端口打开
    因此,使用HTTPS比SSH更容易访问GitHub存储库。
    在我看来,SSH密钥值得在创建它们时做一些额外的工作
  2. SSH密钥不提供对您GitHub帐户的访问权限,因此如果您的密钥被盗,您的帐户不会被劫持。
    1.在SSH密钥中使用强关键短语可以限制任何滥用,即使密钥被盗(在首次破坏对计算机帐户的访问保护之后)
    如果您的GitHub帐户凭据(用户名/密码)被盗,可以更改您的GitHub密码以阻止您访问,并且可以快速删除所有共享存储库。
    如果私钥被盗,有人可以强制推送一个空的存储库,并清除您拥有的每个存储库的所有更改历史,但无法更改您的GitHub帐户中的任何内容。如果你可以访问你的GitHub帐户,尝试从这个漏洞中恢复会容易得多。
    我的首选是使用SSH和密码保护的密钥。我为每台计算机都有一个不同的SSH密钥,所以如果那台机器被盗或密钥泄露,我可以快速登录到GitHub并删除该密钥以防止不必要的访问。
    如果您所在的网络阻止SSH端口,则可以通过HTTPS隧道传输SSH。
    https://help.github.com/articles/using-ssh-over-the-https-port/
    如果您使用HTTPS,我建议您添加双因素身份验证,以保护您的帐户和存储库。
    如果您使用HTTPS与工具(e.g编辑器),您应该使用GitHub帐户中的开发人员令牌,而不是在该工具配置中缓存用户名和密码。令牌可以减轻使用HTTPS的一些潜在风险,因为令牌可以配置为非常特定的访问权限,并且如果该令牌被泄露,则可以轻松撤销。
relj7zay

relj7zay3#

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

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

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

omqzjyyz

omqzjyyz4#

防火墙阻止时启用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

t3irkdon

t3irkdon5#

另请参阅:帮助上的官方Which remote URL should I use?答案。github.com.

编辑:

看起来,使用SSH URL不再需要对公共存储库具有写访问权限,这使得我最初的解释无效。

ORIGINAL:

显然,支持HTTPS URL的主要原因是,如果你没有对公共存储库的写权限,SSH URL将无法与该存储库一起工作。
然而,在部署到生产服务器时,鼓励使用SSH URL--这里的上下文大概是Heroku这样的服务。

7xllpg7q

7xllpg7q6#

使用SSH密钥进行身份验证的安全性可能会降低,因为我们更倾向于定期更改密码,而不是生成新的SSH密钥。
服务器限制了它们将荣誉给定SSH密钥的寿命,这有助于强制用户定期刷新SSH密钥。

7jmck4yq

7jmck4yq7#

支持HTTPS的另一个原因是,如果多个用户在一个中央服务器上管理代码--比如一台开发机器--每个用户都需要创建自己的ssh密钥,以便使用基于SSH的连接。如果连接是HTTPS,则不存在此问题。
我猜你可能会争辩说,设置自己的密钥并不是很难,只是使用存储项目的服务器的一部分,但这是完成工作的另一个障碍。

9fkzdhlc

9fkzdhlc8#

推荐:使用带有 * 凭证生成帮助程序 * 的HTTPS,如Git Credential Managergit-credential-oauth

没有更多的密码或个人访问令牌!第一次推送时,助手将打开一个浏览器窗口进行身份验证。在存储寿命内的后续推送不需要交互。

SSH的缺点:

  • 即使在克隆或获取公共存储库时也进行身份验证。
  • 必须安装SSH客户端。
  • 创建SSH密钥的初始步骤对许多人来说是不熟悉的。
  • 为了防止中间人攻击,用户必须手动verify the host fingerprints。不是每个人都烦!
  • 在主机上配置密钥需要在本地文件和网站之间进行复制和粘贴。要使用3台计算机和5台主机,需要15组配置。
  • 没有密码的SSH密钥以明文形式存储,不会过期。
  • 必须定期键入密码短语(如果使用)。即使在配置了ssh-agent之后,每次系统重启之后都必须输入密码。
  • SSH有时会被防火墙阻止。

HTTPS的优势:

  • 当且仅当需要时进行身份验证。克隆或获取公共存储库时无身份验证。
  • 使用HTTPS证书自动验证服务器真实性。
  • 假设你使用了一个凭证生成助手,比如Git Credential Manager或git-credential-oauth,你就不需要输入密码或配置个人访问令牌。
  • OAuth协议通过使用短期令牌和检测重放攻击的刷新令牌循环来防止令牌被盗。
  • 特定于平台的存储选择,包括wincred、osxkeychain和libsecret,或者只是缓存。

相关问题