跳至主要内容

生成新的 SSH 密钥并将其添加到 ssh 代理

在检查现有 SSH 密钥后,您可以生成一个新的 SSH 密钥用于身份验证,然后将其添加到 ssh 代理。

平台导航

关于 SSH 密钥密码短语

您可以使用 SSH(安全外壳协议)访问和写入 GitHub 上存储库中的数据。当您通过 SSH 连接时,您使用本地计算机上的私钥文件进行身份验证。有关更多信息,请参阅“关于 SSH”。

生成 SSH 密钥时,您可以添加密码短语以进一步保护密钥。每次使用密钥时,您都必须输入密码短语。如果您的密钥有密码短语,并且您不想每次使用密钥时都输入密码短语,则可以将密钥添加到 SSH 代理。SSH 代理管理您的 SSH 密钥并记住您的密码短语。

如果您还没有 SSH 密钥,则必须生成一个新的 SSH 密钥用于身份验证。如果您不确定是否已拥有 SSH 密钥,则可以检查现有密钥。有关更多信息,请参阅“检查现有 SSH 密钥”。

如果您想使用硬件安全密钥对 GitHub 进行身份验证,则必须为硬件安全密钥生成一个新的 SSH 密钥。使用密钥对进行身份验证时,必须将硬件安全密钥连接到计算机。有关更多信息,请参阅OpenSSH 8.2 发行说明

生成新的 SSH 密钥

您可以在本地计算机上生成新的 SSH 密钥。生成密钥后,您可以将公钥添加到 GitHub.com 上的帐户中,以启用通过 SSH 进行 Git 操作的身份验证。

注意

GitHub 通过在 2022 年 3 月 15 日删除较旧、不安全的密钥类型来提高安全性。

从该日期起,不再支持 DSA 密钥 (ssh-dss)。您无法将新的 DSA 密钥添加到 GitHub 上的个人帐户中。

在 2021 年 11 月 2 日之前具有 valid_after 的 RSA 密钥 (ssh-rsa) 可以继续使用任何签名算法。在该日期之后生成的 RSA 密钥必须使用 SHA-2 签名算法。某些较旧的客户端可能需要升级才能使用 SHA-2 签名。

  1. 打开终端终端Git Bash

  2. 粘贴下面的文本,将示例中使用的电子邮件替换为您的 GitHub 电子邮件地址。

    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    注意

    如果您使用的是不支持 Ed25519 算法的旧版系统,请使用

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    这将创建一个新的 SSH 密钥,使用提供的电子邮件作为标签。

    > Generating public/private ALGORITHM key pair.
    

    当系统提示您“输入要保存密钥的文件”时,您可以按Enter接受默认文件位置。请注意,如果您之前创建过 SSH 密钥,ssh-keygen 可能会要求您重写另一个密钥,在这种情况下,我们建议创建一个自定义名称的 SSH 密钥。为此,键入默认文件位置并将 id_ALGORITHM 替换为您自定义的密钥名称。

    > Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM): [Press enter]
    
    > Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter]
    
    > Enter a file in which to save the key (/home/YOU/.ssh/id_ALGORITHM):[Press enter]
    
  3. 在提示符下,键入安全的密码短语。有关更多信息,请参阅“使用 SSH 密钥密码短语”。

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    > Enter same passphrase again: [Type passphrase again]
    

将您的 SSH 密钥添加到 ssh 代理

在将新的 SSH 密钥添加到 ssh 代理以管理您的密钥之前,您应该已检查了现有 SSH 密钥并生成了一个新的 SSH 密钥。将 SSH 密钥添加到代理时,请使用默认的 macOS ssh-add 命令,而不是由macportshomebrew或其他外部来源安装的应用程序。

  1. 在后台启动 ssh 代理。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    

    根据您的环境,您可能需要使用不同的命令。例如,您可能需要使用 root 访问权限,在启动 ssh 代理之前运行 sudo -s -H,或者您可能需要使用 exec ssh-agent bashexec ssh-agent zsh 来运行 ssh 代理。

  2. 如果您使用的是 macOS Sierra 10.12.2 或更高版本,则需要修改您的 ~/.ssh/config 文件以自动将密钥加载到 ssh 代理并将密码短语存储在您的钥匙串中。

    • 首先,检查您的 ~/.ssh/config 文件是否位于默认位置。

      $ open ~/.ssh/config
      > The file /Users/YOU/.ssh/config does not exist.
      
    • 如果文件不存在,则创建文件。

      touch ~/.ssh/config
      
    • 打开您的~/.ssh/config文件,然后修改文件以包含以下行。如果您的 SSH 密钥文件名称或路径与示例代码不同,请修改文件名或路径以匹配您当前的设置。

      文本
      Host github.com
        AddKeysToAgent yes
        UseKeychain yes
        IdentityFile ~/.ssh/id_ed25519
      

      注意

      • 如果您选择不为密钥添加密码短语,则应省略UseKeychain行。
      • 如果您看到Bad configuration option: usekeychain错误,请在配置的Host *.github.com部分添加一行。
      文本
      Host github.com
        IgnoreUnknown UseKeychain
      
  3. 将您的 SSH 私钥添加到 ssh-agent 并将您的密码短语存储在密钥链中。如果您使用不同的名称创建了密钥,或者如果您正在添加具有不同名称的现有密钥,请在命令中将id_ed25519替换为您私钥文件的名称。

    ssh-add --apple-use-keychain ~/.ssh/id_ed25519
    

    注意

    --apple-use-keychain选项在您将 SSH 密钥添加到 ssh-agent 时将密码短语存储在您的密钥链中。如果您选择不为密钥添加密码短语,请在不使用--apple-use-keychain选项的情况下运行该命令。

    --apple-use-keychain选项位于 Apple 的标准版ssh-add中。在 macOS 12.0(Monterey)之前的版本中,--apple-use-keychain--apple-load-keychain标志分别使用语法-K-A

    如果您没有安装 Apple 的标准版ssh-add,您可能会收到错误。有关更多信息,请参阅“错误:ssh-add:非法选项 -- apple-use-keychain”。

    如果您继续收到密码短语提示,您可能需要将命令添加到您的~/.zshrc文件(或用于 bash 的~/.bashrc文件)。

  4. 将 SSH 公钥添加到您在 GitHub 上的帐户。有关更多信息,请参阅“将新的 SSH 密钥添加到您的 GitHub 帐户”。

如果您安装了GitHub Desktop,您可以使用它来克隆存储库,而无需处理 SSH 密钥。

  1. 在新的管理员提升权限的 PowerShell 窗口中,确保 ssh-agent 正在运行。您可以使用“自动启动 ssh-agent”说明,如“使用 SSH 密钥密码短语”中所示,或手动启动它。

    # start the ssh-agent in the background
    Get-Service -Name ssh-agent | Set-Service -StartupType Manual
    Start-Service ssh-agent
    
  2. 在没有提升权限的终端窗口中,将您的 SSH 私钥添加到 ssh-agent。如果您使用不同的名称创建了密钥,或者如果您正在添加具有不同名称的现有密钥,请在命令中将id_ed25519替换为您私钥文件的名称。

    ssh-add c:/Users/YOU/.ssh/id_ed25519
    
  3. 将 SSH 公钥添加到您在 GitHub 上的帐户。有关更多信息,请参阅“将新的 SSH 密钥添加到您的 GitHub 帐户”。

  1. 在后台启动 ssh 代理。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    

    根据您的环境,您可能需要使用不同的命令。例如,您可能需要使用 root 访问权限,在启动 ssh 代理之前运行 sudo -s -H,或者您可能需要使用 exec ssh-agent bashexec ssh-agent zsh 来运行 ssh 代理。

  2. 将您的 SSH 私钥添加到 ssh-agent。

    如果您使用不同的名称创建了密钥,或者如果您正在添加具有不同名称的现有密钥,请在命令中将id_ed25519替换为您私钥文件的名称。

    ssh-add ~/.ssh/id_ed25519
    
  3. 将 SSH 公钥添加到您在 GitHub 上的帐户。有关更多信息,请参阅“将新的 SSH 密钥添加到您的 GitHub 帐户”。

为硬件安全密钥生成新的 SSH 密钥

如果您使用的是 macOS 或 Linux,您可能需要更新您的 SSH 客户端或在生成新的 SSH 密钥之前安装新的 SSH 客户端。有关更多信息,请参阅“错误:未知密钥类型”。

  1. 将您的硬件安全密钥插入计算机。

  2. 打开终端终端Git Bash

  3. 粘贴下面的文本,将示例中的电子邮件地址替换为您在 GitHub 上的帐户关联的电子邮件地址。

    ssh-keygen -t ed25519-sk -C "your_email@example.com"
    
    ssh-keygen -t ed25519-sk -C "your_email@example.com"
    
    ssh-keygen -t ed25519-sk -C "your_email@example.com"
    

    注意

    如果命令失败并且您收到错误invalid formatfeature not supported,您可能正在使用不支持 Ed25519 算法的硬件安全密钥。请改用以下命令。

    ssh-keygen -t ecdsa-sk -C "your_email@example.com"
    
  4. 出现提示时,触摸硬件安全密钥上的按钮。

  5. 当系统提示您“输入要保存密钥的文件”时,按 Enter 接受默认文件位置。

    > Enter a file in which to save the key (/Users/YOU/.ssh/id_ed25519_sk): [Press enter]
    
    > Enter a file in which to save the key (c:\Users\YOU\.ssh\id_ed25519_sk):[Press enter]
    
    > Enter a file in which to save the key (/home/YOU/.ssh/id_ed25519_sk):[Press enter]
    
  6. 当系统提示您输入密码短语时,请按Enter

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    > Enter same passphrase again: [Type passphrase again]
    
  7. 将 SSH 公钥添加到您在 GitHub 上的帐户。有关更多信息,请参阅“将新的 SSH 密钥添加到您的 GitHub 帐户”。