在 GitHub 网站上有一个链接...
https://help.github.com/articles/generating-ssh-keys
...它说...
如果您决定不使用推荐的 HTTPS 方法,我们可以使用 SSH 密钥在您的计算机和 GitHub 之间建立安全连接。以下步骤将引导您生成 SSH 密钥,然后将公钥添加到您的 GitHub 帐户。
为什么 HTTPS 是推荐的方法? SSH 方法中是否存在某种安全漏洞,还是速度较慢?我创建了一个 SSH 密钥,这样可以缓解任何安全问题吗?
GitHub 已多次更改他们的建议 (example)。
看来他们目前推荐 HTTPS,因为它是最容易在最广泛的网络和平台上设置的,而且对于所有这一切的新手来说都是最容易的。
SSH 没有固有缺陷(如果有的话,他们会禁用它)——在下面的链接中,您会看到它们仍然提供有关 SSH 连接的详细信息:
HTTPS 不太可能被防火墙阻止。 https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls https:// 克隆 URL 可用于所有存储库,不管能见度如何。即使您位于防火墙或代理之后,https:// 克隆 URL 也能正常工作。 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 凭据”。
我认为 GitHub 推荐 HTTPS 有几个原因
从任何地方访问存储库都更简单,因为您只需要您的帐户详细信息(不需要 SSH 密钥)即可写入存储库。 HTTPS 是在所有防火墙中都开放的端口。 SSH 并不总是作为与外部网络通信的端口打开
因此,使用 HTTPS 比使用 SSH 更普遍地访问 GitHub 存储库。
在我看来,SSH 密钥值得在创建它们时进行一些额外的工作
SSH 密钥不提供对您的 GitHub 帐户的访问权限,因此如果您的密钥被盗,您的帐户不会被劫持。对您的 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.
如果这有效,那就太好了!如果没有,您可能需要关注我们的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
另请参阅:help.github.com 上的官方 Which remote URL should I use? 答案。
编辑:
似乎不再需要拥有对公共存储库的写入权限才能使用 SSH URL,从而使我原来的解释无效。
原来的:
显然,支持 HTTPS URL 的主要原因是,如果您没有对该存储库的写入权限,SSH URL 将无法与公共存储库一起使用。
但是,鼓励使用 SSH URL 部署到生产服务器 - 大概这里的上下文是像 Heroku 这样的服务。
有人可能会争辩说,使用 SSH 密钥进行身份验证的安全性较低,因为我们更倾向于定期更改密码,而不是生成新的 SSH 密钥。
限制使用 SSH 密钥的服务器可以帮助强制用户定期刷新 SSH 密钥的做法。
支持 HTTPS 的另一个原因是,如果多个用户在中央服务器(例如开发机器)上管理代码,则每个用户都需要创建自己的 ssh 密钥才能使用基于 SSH 的连接。如果连接是 HTTPS,则不存在此问题。
我想您可能会争辩说,将自己的密钥设置为使用存储该项目的服务器的入职培训的一部分并不难,但这是完成工作的另一个障碍。
ssh-agent
?很公平。谢谢!