生成新的 SSH 密钥并将其添加到Github
关于 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)。 无法在 GitHub.com上向个人帐户添加新的 DSA 密钥。
2021 年 11 月 2 日之前带有 valid_after 的 RSA 密钥 (ssh-rsa) 可以继续使用任何签名算法。 在该日期之后生成的 RSA 密钥必须使用 SHA-2 签名算法。 一些较旧的客户端可能需要升级才能使用 SHA-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 a file in which to save the key(输入要保存密钥的文件)”时,可以按 Enter 键接受默认文件位置。 请注意,如果以前创建了 SSH 密钥,则 ssh-keygen 可能会要求重写另一个密钥,在这种情况下,我们建议创建自定义命名的 SSH 密钥。 为此,请键入默认文件位置,并将 id_ALGORITHM 替换为自定义密钥名称。
> Enter a file in which to save the key (/home/YOU/.ssh/ALGORITHM):[Press enter]
在提示符下,键入安全密码。 有关详细信息,请参阅“使用 SSH 密钥密码”。
> Enter passphrase (empty for no passphrase): [Type a passphrase] > Enter same passphrase again: [Type passphrase again]
测试 SSH 连接
测试连接时,您将需要使用密码(即您之前创建的 SSH 密钥密码)验证此操作。
-
打开终端。
-
输入以下内容:
$ ssh -T git@github.com # Attempts to ssh to GitHub
您可能会看到类似如下的警告:
> The authenticity of host 'github.com (IP ADDRESS)' can't be established. > ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. > Are you sure you want to continue connecting (yes/no)?
验证所看到消息中的指纹是否与 GitHub 的公钥指纹匹配。 如果是,则键入 yes:
> Hi USERNAME! You've successfully authenticated, but GitHub does not > provide shell access.
你可能会看到此错误消息:
... Agent admitted failure to sign using the key. debug1: No more authentication methods to try. Permission denied (publickey).
这是某些 Linux 发行版的已知问题。 有关详细信息,请参阅“错误:代理承认没有签署”。
注意:远程命令应退出,并显示代码 1。
验证生成的消息包含您的用户名。 如果收到“权限被拒绝”消息,请参阅“错误:权限被拒绝(公钥)”。