我是 Github 的新人。我已经生成了 SSH 密钥,现在可以在 SSH Keys 中看到它。是公钥还是私钥?
我已将 SSH 密钥(我在SSH 密钥下看到)发送给我的客户。他问是否公开?他想要我的私钥。
是否需要 SSH 私钥?如果是这样,我该如何找回它?
您无法从 GitHub 帐户 检索私钥,但如果您将密钥文件显式添加到已发布的存储库,则可以。 GitHub 还限制您查看附加到帐户的公钥的指纹;据我所知,您也无法在 GitHub 上查看帐户的公钥。
SSH 公钥存储在一行中,并以密钥类型字段开头,例如
ssh-rsa
或 ecdsa-sha2-nistp256
。私钥有多行和一个标识密钥块的标头。例如:
-----开始 RSA 私钥-----
无论如何,您实际上无法将有效的私钥添加到 GitHub 帐户。目前,GitHub 仅接受 RSA 和 DSA 公钥用于此目的。如果您尝试添加不同的密钥类型或任何类型的无效公钥,您会收到如下错误:
密钥无效。它必须以“ssh-rsa”或“ssh-dss”开头。检查您是否正在复制密钥的公共部分
所有这一切的结果是——除了你应该“永远不”将私钥存储在服务器端这一事实之外——“不可能”将私钥附加到 GitHub 帐户。因此,无法从 GitHub 帐户检索密钥对的私有部分。 当然,虽然您无法将 SSH 私钥添加到 GitHub 帐户,但您可以将它们添加到已发布的存储库。作为一个例子,
Vagrant项目发布了完整的密钥对,但这是一个特例。 发布您的密钥本质上是不安全的。除非您了解其含义,否则请勿这样做。
私钥是...
私人。导出的是public密钥,存储在公共站点(github.com)
除了 https://github.com/<username>.keys
来列出存储在 GitHub 上的 SSH 公钥之外,您还可以使用 GitHub CLI 来使用命令行
gh ssh-key list
自gh 2.6.1 起,该命令将标题和 id 列添加到列表输出中,如 #6136(评论)
中所述。 (PR 6270) 在 TTY 模式下,显示标题。 在非 TTY 模式下,
id
列会附加在末尾以维持现有列的顺序。
输出示例:$ gh ssh-key list TITLE ID KEY ADDED Test Key 70929690 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEuZpG/RQ20C4NxoyhuS4D6+LmSB+ma9eVbeauBaf68l 4d Test Key 70929824 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA1dxiSc/vhYD7QRAxTL67BguPioiDRYPtptoSy9NCHd 4d
您注册使用 GitHub 的 SSH 公钥位于:
恕我直言,这在某种程度上是一种有问题的安全实践,因为你的身份验证密钥实际上应该只在你和 Github 之间进行。就我自己而言,我已将 ~/.ssh/config
设置为
StrictHostKeyChecking yes
和
UserKnownHostsFile ~/.ssh/known_hosts_github
以及其他 ~/.ssh/config
收紧,以便这些键永远不会在其他地方使用。GitHub 现在还支持 SSH 签名公钥(GPG 的替代方案),这些密钥以 JSON 数组形式公开提供,网址为:https://api.github.com/users/username/ssh_signing_keys
通过访问这些 SSH 签名密钥,您可以验证提交、标签,甚至(如果您使用分离的 SSH 签名)代码发布,支持验证 GitHub 存储库来源的工具。 同样,就像我的 SSH 身份验证密钥一样,我在 GitHub 上使用的每台活动计算机都有一个密钥,这些密钥与我的 SSH 身份验证密钥不同(最佳实践和 NIST 建议)。
目前还没有关于如何撤销旧 SSH 签名密钥的最佳实践。
--克里斯托弗·艾伦