如何在 GitHub 上设置 SSH 密钥

2025年1月8日 | 阅读 9 分钟

什么是 SSH 密钥?

SSH(安全外壳协议)密钥是一对加密密钥,用于在两方之间进行安全通信和身份验证:客户端(您的计算机)和服务器(例如远程服务器或像 GitHub 这样的 Git 存储库主机)。

SSH 密钥对由私钥和公钥组成。私钥保存在客户端,应安全地存储和保护。公钥上传到您要与之进行身份验证的服务器或服务,从而使其能够验证您的身份。

当您尝试使用 SSH 连接到服务器时,客户端使用私钥生成数字签名,服务器使用相应的公钥验证签名。如果签名验证成功,服务器将授予客户端访问权限。

SSH 密钥的优点

SSH 密钥比传统的基于密码的身份验证具有多种优势

  • 增强的安全性: SSH 密钥使用非对称加密,使得从公钥推导出私钥在计算上是不可行的。这意味着即使公钥被泄露,私钥仍然是安全的。
  • 无需密码传输: SSH 密钥消除了通过网络传输密码的需要,从而降低了拦截或基于密码的攻击的风险。
  • 方便: 设置好 SSH 密钥对并将公钥添加到您要访问的服务器或服务后,您无需重复输入密码即可进行身份验证。

为什么使用 SSH 密钥?

SSH 密钥通常用于以下目的,例如

  • 通过 SSH 安全地登录到远程服务器。
  • 使用 Git 存储库(例如 GitHub、GitLab 或 Bitbucket)进行身份验证以推送和拉取代码。
  • 自动化部署和配置管理工具,例如 Ansible 或 Capistrano。
  • 使用 SFTP(SSH 文件传输协议)等工具进行安全的文件传输。

通过生成和使用 SSH 密钥,您可以增强与远程服务器和服务的交互的安全性和便利性。

SSH 密钥的类型

SSH 支持不同类型的加密密钥。最常见的类型是

  • RSA: Rivest-Shamir-Adleman 是一种广泛使用的非对称加密算法。
  • DSA: 数字签名算法,RSA 的较旧替代方案。
  • ECDSA: 椭圆曲线数字签名算法,一种更新、更高效的算法。
  • Ed25519: 一种高安全性的椭圆曲线算法,提供强大的安全性,性能更快。

注意:建议使用 Ed25519 或 RSA 密钥,因为它们在安全性和性能之间提供了良好的平衡。

如何生成 SSH 密钥对?

您可以使用 ssh-keygen 命令行工具生成 SSH 密钥对。基本语法是

<key_type> 替换为所需的密钥类型,例如 ed25519 或 rsa。 -C 标志提供注释(通常是您的电子邮件地址)。如果省略 -t 标志,将使用默认密钥类型(通常是 RSA)。

在密钥生成期间,系统会提示您选择一个位置来保存密钥,并可选地设置密码。私钥文件将保存在没有文件扩展名的情况下,而公钥文件将具有相同的名称,但带有 .pub 扩展名。

如何在 Git 中使用 SSH 密钥?

要在 Git 存储库(例如 GitHub)中使用 SSH 密钥,您需要将您的公钥添加到您的帐户。生成密钥对后,您可以复制公钥文件的内容(id_rsa.pub 或 id_ed25519.pub,具体取决于密钥类型),并将其粘贴到 Git 托管平台的 SSH 密钥设置中。

将 SSH 密钥与您的 Git 帐户关联后,您可以使用 SSH URL 克隆并与存储库进行交互。例如

将 username 替换为您的用户名,将 repository 替换为存储库名称。

  • 密码保护

生成 SSH 密钥时,您可以设置密码。密码通过使用您选择的密码加密私钥来增加额外的安全层。每次使用密钥时,您都需要输入密码才能解锁私钥。

密码是推荐的,但可选的。它们在您的私钥被泄露时提供保护,但由于您每次使用密钥时都必须输入密码,因此也可能带来更多不便。

如何在 GitHub 中设置 SSH 密钥,

要在 GitHub 中设置 SSH 密钥,您可以按照以下步骤操作

步骤 1:生成 SSH 密钥对。

如果您还没有 SSH 密钥对,您需要生成一个。打开终端或命令提示符并输入以下命令

将“your_email@example.com”替换为与您的 GitHub 帐户关联的电子邮件地址。您还可以通过更改 -t 选项来选择不同的密钥类型,例如 RSA。

系统将提示您输入保存密钥的文件路径,以及一个可选的密码。按 Enter 键接受默认文件路径,如果您不想使用密码,请将密码留空。

步骤 2:将 SSH 密钥添加到您的 GitHub 帐户。

生成密钥对后,您需要将公钥添加到您的 GitHub 帐户。运行以下命令以显示公钥的内容

如果您选择了不同的文件路径或密钥类型,请相应地调整命令。复制命令的完整输出。

步骤 3:登录到您的 GitHub 帐户。

转到 GitHub 网站 (https://github.com/) 并登录到您的帐户。

步骤 4:访问您的 SSH 和 GPG 密钥设置。

单击右上角的个人资料图片,然后从下拉菜单中选择“设置”。在左侧边栏中,单击“SSH 和 GPG 密钥”。

步骤 5:添加新的 SSH 密钥。

如果您有现有的密钥,请单击“新建 SSH 密钥”或“添加 SSH 密钥”按钮。为您的密钥提供一个描述性标题,例如“个人笔记本电脑 SSH 密钥”。然后,将您从步骤 2 复制的公钥粘贴到“密钥”字段中。

步骤 6:保存 SSH 密钥。

单击“添加 SSH 密钥”按钮以保存密钥。 GitHub 将验证密钥并将其添加到您的帐户。

步骤 7:使用您的 SSH 密钥进行身份验证。

要测试您的 SSH 密钥,请在您的终端中运行以下命令

如果一切设置正确,您应该会看到一条类似的消息

您好,username!您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。

将“username”替换为您的 GitHub 用户名。

现在,您已成功在 GitHub 中设置了 SSH 密钥。您现在可以使用 SSH URL 克隆并与存储库进行交互,该 URL 以 git@github.com 开头。

一些附加步骤

以下是您在使用 GitHub 中的 SSH 密钥时可能会觉得有用的几个附加步骤

步骤 1:检查现有的 SSH 密钥

如果您不确定您是否已经在您的计算机上设置了 SSH 密钥,您可以运行此命令导航到默认的 SSH 目录

在这里,您可以列出目录中的文件,以查看是否存在任何现有的密钥

默认情况下,使用 ssh-keygen 命令生成的 SSH 密钥对将被命名为 id_ed25519(私钥)和 id_ed25519.pub(公钥)。

步骤 2:将您的 SSH 密钥添加到 SSH 代理(可选)

要避免每次使用 SSH 密钥时都必须输入密码,您可以将密钥添加到 SSH 代理。使用以下命令添加您的私钥

如果您使用了不同的名称,请务必将 id_ed25519 替换为您的私钥的文件名。

步骤 3:配置您的 Git 客户端以使用 SSH

为了确保您的 Git 客户端在使用 GitHub 时使用 SSH,您可以将存储库的远程 URL 设置为 SSH URL。导航到您计算机上的存储库目录,并使用以下命令

将 username 替换为您的 GitHub 用户名,将 repository 替换为您的存储库名称。

步骤 4:测试您的 SSH 连接到 GitHub

您可以通过运行此命令来验证您的 SSH 连接到 GitHub 是否正常工作

如果一切设置正确,您应该会看到与之前提到的类似的消息。

步骤 5:使用 SSH 代理转发(高级)

如果需要通过 SSH 密钥从您的 GitHub 存储库连接到远程服务器或服务,您可以使用 SSH 代理转发。这允许您在远程服务器上使用您的本地 SSH 密钥。要启用 SSH 代理转发,您需要在连接到远程服务器时使用 SSH 添加 -A 标志

确保 SSH 代理正在运行并且您的密钥已添加到代理中。

在 GitHub 中设置 SSH 密钥的优点

在 GitHub 中设置 SSH 密钥具有以下优点,例如

  1. 增强的安全性: SSH 为数据传输和身份验证提供强大的加密。使用 SSH 密钥消除了通过网络传输密码的需要,从而降低了密码拦截或暴力攻击的风险。
  2. 改进的身份验证: SSH 密钥使用非对称加密,使得攻击者在计算上无法从公钥推导出私钥。与基于密码的身份验证相比,这增加了额外的安全层。
  3. 便利性和效率: 设置 SSH 密钥并将它们与您的 GitHub 帐户关联后,您可以进行身份验证,而无需重复输入密码。这节省了时间,并使身份验证过程更有效,尤其是在使用多个存储库或通过自动化或脚本与 GitHub 交互时。
  4. 易于使用 Git 操作: 设置了 SSH 密钥后,您可以轻松地从 GitHub 克隆、推送和拉取存储库,而无需每次都输入您的凭据。这简化了您的 Git 工作流程并提高了生产力。
  5. 多密钥对支持: GitHub 允许您将多个 SSH 密钥与您的帐户关联。如果您在不同的计算机上工作,或者想向不同的密钥对授予对特定存储库的访问权限,这将很有用。
  6. 强身份验证: SSH 密钥提供比密码更安全的身份验证方法。非对称加密确保只有私钥的持有者才能与服务器进行身份验证,从而增加额外的安全层。
  7. 无需密码: 设置 SSH 密钥并将其与您的 GitHub 帐户关联后,您可以无缝进行身份验证,而无需记住和重复输入密码。这节省了时间,并消除了弱密码或被盗密码的风险。

在 GitHub 中设置 SSH 密钥的缺点

  1. 密钥管理: 管理 SSH 密钥需要负责任的密钥存储和安全实践。您必须确保您的私钥被安全地存储并防止未经授权的访问。如果您的私钥被泄露,攻击者可能会获得对您的 GitHub 帐户的访问权限。
  2. 对于初学者来说,设置很复杂: 对于不熟悉 SSH 和密钥生成概念的初学者来说,首次设置 SSH 密钥可能更复杂。但是,在适当的指导和按照说明操作下,这很容易实现。
  3. 访问限制: SSH 密钥与单个用户帐户和机器相关联。 如果您需要从不同的机器或帐户访问您的 GitHub 存储库,您需要在每个系统上设置 SSH 密钥。
  4. 密钥管理和安全: 妥善的密钥管理至关重要。 您必须确保您的私钥保持安全,并防止未经授权的访问。 丢失或泄露私钥可能导致潜在的安全风险和未经授权访问您的 GitHub 帐户。
  5. 密钥分发和撤销: 如果您在一个团队中工作或与他人协作,共享 SSH 密钥可能具有挑战性。 不建议共享私钥。 相反,每个团队成员都应该生成自己的密钥对。 此外,如果由于安全问题需要撤销密钥,则必须手动从所有授权的服务器和服务中删除密钥。
  6. 初始设置复杂性: 对于不熟悉 SSH 和密钥生成概念的用户,初始设置过程可能需要澄清。 但是,GitHub 提供了清晰的文档和说明来指导您。
  7. 受限环境中的访问限制: 在某些高度受限的环境中,防火墙或安全策略可能会阻止或限制 SSH。 在这种情况下,可能需要使用基于 HTTPS 的身份验证作为替代方案。

在 GitHub 中设置 SSH 密钥的应用

  1. 安全远程存储库访问: 通过在 GitHub 中配置 SSH 密钥,您可以使用 Git 安全地访问您的远程存储库并与之交互。 您可以克隆存储库、推送更改和拉取更新,而无需每次都提供您的 GitHub 用户名和密码进行身份验证。 这简化并保护了使用代码的过程。
  2. 协作开发: 如果您与他人合作开发 GitHub 存储库,SSH 密钥可以实现安全高效的协作。 每个团队成员都可以设置自己的 SSH 密钥,并授予对其正在使用的存储库的访问权限。 这允许团队成员之间进行安全且经过身份验证的交互,而无需共享密码或依赖单独的访问凭据。
  3. 持续集成和部署 (CI/CD): CI/CD 管道通常需要访问 GitHub 存储库以构建、测试和部署应用程序。 通过配置 SSH 密钥,您可以对您的 CI/CD 系统或服务(例如 Jenkins、Travis CI 或 CircleCI)进行 GitHub 身份验证。 这确保了在自动化过程中与您的代码存储库的安全和无缝集成。
  4. 安全自动化和脚本编写: SSH 密钥在自动化任务或编写与 GitHub 交互的脚本时很有用。 例如,如果您有需要以编程方式访问 GitHub 存储库的脚本或工具,SSH 密钥允许您安全地进行身份验证,而无需用户干预。 这有助于计划任务、批处理操作或其他自动化的 GitHub 工作流程。

下一个主题Whoava