GitHub设置SSH秘钥

发布于 2024-02-28  456 次阅读


前言

由于 GitHub 在 2021 年 8 月 13 日移除了对密码身份验证的支持,所以无法通过用户名和密码进行身份验证,导致克隆失败。

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.

为了解决这个问题,可以考虑使用 SSH URL 来进行克隆,这样可以借助在 GitHub 上设置的 SSH 密钥进行身份验证。以下是一些步骤正确地拉取代码:

  1. 首先,确保已经将公钥添加到 GitHub 帐户的 SSH 密钥设置中。如果还没有添加,请按照 GitHub 官方文档上的说明进行操作或者参考本文章下面的内容操作。

  2. 一旦公钥已经添加到 GitHub 帐户中,可以从代码库页面获取 SSH URL。在代码库页面上,选择 "SSH" 作为克隆的协议,并复制SSH URL。

  3. 在 CentOS 终端中,使用以下命令进行代码克隆,替换 从 GitHub 页面上复制的 SSH URL:

git clone <SSH-URL>
  1. 然后系统会提出一次输入密码的请求,这是为了保护私钥。输入用于生成 SSH 密钥时设定的密码,然后按下 Enter 键。

通过上述步骤,应该能够成功地使用 SSH 协议从 GitHub 上克隆代码库,而无需再输入用户名和密码。这样可以避免出现密码身份验证被移除的问题,并且提供了更安全的身份验证方式。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

这个提示是 SSH 客户端在首次连接远程主机时所显示的。它是为了确保要连接的远程主机是预期要连接的主机,而不是中间人攻击。

当第一次通过 SSH 连接到一个新的主机时,SSH 客户端会展示远程主机的指纹(fingerprint),并询问是否希望继续连接。可以选择以下几种选项中的一种:

  • 输入 "yes" 表示信任远程主机,并希望将其指纹添加到本地的 known_hosts 文件中,以便将来的连接能够自动验证。

  • 输入 "no" 表示不信任远程主机,连接将被中断。

  • 输入 "fingerprint" 表示希望查看远程主机的指纹,以便确认连接到了正确的主机。

如果信任该远程主机,通常情况下应输入 "yes" 后按下 Enter 键,以继续连接。这样做将会将远程主机的指纹添加到 known_hosts 文件中,使得将来的连接可以自动进行指纹验证。

如果对远程主机有任何疑虑,应谨慎处理并避免连接。在确定远程主机身份后,再进行连接操作是非常重要的,以确保安全的通信。

开始

设置GitHub的SSH key

进入到个人信息界面选择SSH and GPG keys

给你的秘钥取一个标题

如果你还没有 SSH 密钥,可以使用以下命令在终端中生成 SSH 密钥

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

在这里,将 your_email@example.com 替换为 GitHub 上注册的电子邮件地址。也可以通过 -f 参数来指定密钥文件的名称和路径。

Enter file in which to save the key (/root/.ssh/id_rsa):

这个提示是在生成 SSH 密钥时出现的。系统正在询问希望将新生成的密钥保存到哪个文件中。

默认情况下,系统会建议将密钥保存到 /root/.ssh/id_rsa 文件中。这是一个默认的建议路径和文件名,可以按照系统建议直接按下回车键,将密钥保存到该位置;或者根据自己的需要输入其他路径和文件名来保存密钥。

如果希望更改保存路径和文件名,可以在提示符后输入路径和文件名,然后按下回车键来保存新的密钥。

Enter passphrase (empty for no passphrase):

这个提示是在生成 SSH 密钥时出现的。系统正在询问是否要为私钥设置一个密码。

设置密码可以增加私钥的安全性。如果设置了密码,那么在每次使用私钥进行身份验证时,系统都会要求输入这个密码。这样,即使私钥被盗或泄露,黑客也需要知道密码才能使用它。

如果选择不设置密码,那么私钥将不受任何密码保护,这样在使用私钥进行身份验证时就不需要输入密码,方便但相对不够安全。

根据需求,可以选择输入一个密码来保护私钥,或者直接按下回车键跳过,不设置密码。

将公钥添加到 GitHub 帐户

需要复制你的 SSH 公钥内容,并将其添加到 GitHub 帐户的设置页面中。可以使用以下命令来复制公钥内容:

cat ~/.ssh/id_rsa.pub

添加 SSH 密钥到 SSH 代理(可选)

如果想要使用 SSH 代理来管理密钥,可以运行以下命令将密钥添加到 SSH 代理:

ssh-add ~/.ssh/id_rsa

将 SSH 密钥添加到 SSH 代理有几个重要的作用:

  1. 无需重复输入密码:一旦将 SSH 密钥添加到 SSH 代理,在一段时间内就不需要重复输入私钥的密码。这样可以方便地进行多个 SSH 操作,而无需每次都输入密码。

  2. 密钥管理:SSH 代理可以帮助集中管理多个私钥,从而使得在进行 SSH 操作时能够更加灵活地选择合适的密钥。

  3. 单点登录:通过使用 SSH 代理,只需在登录时验证一次密码,之后就可以在会话期间使用代理来自动处理身份验证,而无需再次输入密码。

总的来说,将 SSH 密钥添加到 SSH 代理可以提高安全性和便利性,尤其是在需要频繁进行 SSH 操作时,可以大大简化身份验证的流程。

Could not open a connection to your authentication agent.

这个错误提示表明系统无法连接到 SSH 认证代理。SSH 认证代理是一个后台程序,负责管理 SSH 密钥并处理与远程服务器的安全通信。通常情况下,SSH 认证代理会在登录时启动,并持续运行整个会话期间。

出现这个错误可能有几种原因:

  1. SSH 代理未启动:可能是因为 SSH 代理没有正确启动,导致无法连接到它。可以尝试手动启动 SSH 代理,命令为 eval "$(ssh-agent -s)"

  2. 代理环境变量未设置:可能是由于代理相关的环境变量未正确设置,导致系统无法找到代理。可以使用 echo $SSH_AUTH_SOCK 命令检查 SSH_AUTH_SOCK 环境变量是否已正确设置。

  3. 代理失效:有时候代理可能会因为各种原因而失效,这时候可能需要重新启动代理。

为了解决这个问题,可以先尝试手动启动 SSH 代理,然后再执行下一步操作。如果问题仍然存在,可能需要进一步检查代理的设置和状态,以确保它能够正常工作。

Agent pid 61642

这个消息表明 SSH 代理已经成功启动,并且它的进程 ID(pid)是61642。每个正在运行的进程都有一个唯一的进程 ID,用于在系统中标识和管理这些进程。

在这种情况下,这个消息表明已经成功启动了 SSH 代理,并且系统为这个代理分配了进程 ID 61642。这意味着可以利用这个进程 ID 来管理和监控 SSH 代理的运行情况,比如在需要的时候终止该代理进程。

一般来说,当看到这个消息时,表示 SSH 代理已经成功启动,并且准备好接受 SSH 密钥以及处理与远程服务器的安全通信。

Enter passphrase for /root/.ssh/id_rsa:

这个消息表示系统正在请求输入与私钥 /root/.ssh/id_rsa 相关联的密码短语。当创建 SSH 密钥对时,可以选择为私钥指定一个密码短语(passphrase),这样可以增加私钥的安全性。

在这种情况下,系统在尝试使用私钥进行身份验证时发现了密码短语的设置,并要求您输入该密码短语,以便解锁私钥并完成身份验证过程。这是为了确保只有持有密码短语的人才能使用私钥进行身份验证,从而提高了私钥的安全性。

如果想要继续进行 SSH 操作,需要输入与私钥 /root/.ssh/id_rsa 相关联的密码短语。输入密码短语时,屏幕上不会显示任何字符,这是为了防止密码泄露。请输入密码短语后,按下 Enter 键即可完成输入。

如果忘记了密码短语,那么很遗憾,你将无法使用这个私钥进行身份验证。在这种情况下,可能需要考虑重新生成一个新的密钥对,并为新的私钥设置一个易于记住但又足够安全的密码短语。

Identity added: /root/.ssh/id_rsa

这个消息表示 SSH 客户端已成功将私钥 /root/.ssh/id_rsa 添加到 SSH 代理中。在进行 SSH 连接时,SSH 客户端会尝试使用代理中已添加的私钥来进行身份验证,以便与远程服务器建立安全连接。

当看到这个消息时,意味着私钥已经成功交给 SSH 代理,并可以在需要的时候用于进行身份验证。这样做的目的是为了让您在后续的 SSH 连接中无需重复输入密码短语,而是直接从代理中获取已添加的私钥进行认证。

这种方式有助于简化 SSH 连接过程,同时也提高了安全性,因为私钥的密码短语只需在添加到代理时输入一次,之后就可以由代理负责安全地管理和使用私钥。

总之,这条消息表明 SSH 客户端已准备好使用私钥 /root/.ssh/id_rsa 进行身份验证,使得后续的 SSH 连接能够更加便捷和安全。