跳至主要内容

生成新的 SSH 密钥并将其添加到 ssh-agent

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

平台导航

关于 SSH 密钥密码

您可以使用 SSH(安全外壳协议)访问和写入 GitHub.com 上存储库中的数据。通过 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.com 上的个人帐户。

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

  1. 打开 终端终端Git Bash

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

    ssh-keygen -t ed25519 -C "[email protected]"
    

    注意:如果使用不支持 Ed25519 算法的旧系统,请使用

     ssh-keygen -t rsa -b 4096 -C "[email protected]"
    

    这将创建一个新的 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-agent

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

  1. 在后台启动 ssh-agent。

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

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

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

    • 首先,检查你的 ~/.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
    

    注意:当你将 SSH 密钥添加到 ssh-agent 时,--apple-use-keychain 选项会将密码存储在你的钥匙串中。如果你选择不为你的密钥添加密码,请在没有 --apple-use-keychain 选项的情况下运行该命令。

    --apple-use-keychain 选项位于 Apple 的标准版 ssh-add 中。在早于 Monterey (12.0) 的 macOS 版本中,--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 密钥密码短语”中的“自动启动 ssh-agent”说明中使用该说明,或手动启动它。

    # 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-agent。

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

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

  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 "[email protected]"
    
    ssh-keygen -t ed25519-sk -C "[email protected]"
    
    ssh-keygen -t ed25519-sk -C "[email protected]"
    

    注意:如果命令失败,并且你收到了错误 无效格式不支持的功能,你可能正在使用不支持 Ed25519 算法的硬件安全密钥。改为输入以下命令。

     ssh-keygen -t ecdsa-sk -C "[email protected]"
    
  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 帐户”。