繁体   English   中英

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

[英]Why does GitHub recommend HTTPS over SSH?

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

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

...它说...

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

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

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 进行克隆,您可以使用凭证助手将您的 GitHub 凭证缓存在 Git 中。 有关更多信息,请参阅“ 使用 HTTPS url 进行克隆”和“ 在 Git 中缓存您的 GitHub 凭据”。

我认为 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 帐户中的开发人员令牌,而不是在该工具配置中缓存用户名和密码。 令牌将减轻使用 HTTPS 的一些潜在风险,因为令牌可以配置为非常特定的访问权限,并且如果该令牌被泄露,则很容易被撤销。

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

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

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

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

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

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

编辑:

似乎不再需要拥有对公共存储库的写入权限才能使用 SSH URL,从而使我原来的解释无效。

原来的:

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

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

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

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

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

我想您可能会争辩说,将自己的密钥设置为使用存储该项目的服务器的入职培训的一部分并不难,但这是完成工作的另一个障碍。

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

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

...它说...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM