使用 SSH 连接 GitHub

目录

  • 使用 SSH 连接 GitHub
    • 关于 SSH
    • 检查现有 SSH 密钥
    • 生成新的 SSH 密钥并把它添加到 ssh 代理中
      • 关于生成 SSH 密钥
      • 生成新的 SSH 密钥
      • 将 SSH 密钥添加到 ssh 代理中
      • 为硬件安全密钥创建新的 SSH 密钥
    • 将新的 SSH 密钥添加到您的 GitHub 账号中
        • GitHub CLI(命令行接口)
        • 浏览器
    • 测试 SSH 连接
    • 使用 SSH 密钥密码
      • 增加或修改密码
      • Mac 中在密钥链中保存密码
      • 在 Git for windows 上自动启动 ssh-agent

使用 SSH 连接 GitHub


您可以使用安全 shell 协议 (Secure Shell Protocol --> SSH) 来连接 GitHub,SSH 能在不安全的网络中提供一个安全的通道。

关于 SSH

使用 SSH 协议,您可以连接远程服务器及服务并对其进行身份验证。使用 SSH 密钥,可以连接到 GitHub,而无需在每次访问时提供用户名和个人访问口令。

当您设置 SSH 时,需要生成一个新的 SSH 密钥,并把它添加到 ssh 代理(agent)中。只有将 SSH 密钥添加到您的 GitHub 账号中,然后才能使用该密钥进行身份验证。有关更多的信息,请参见 “生成新的 SSH 密钥并将其添加到 ssh 代理中” 和 “将新的 SSH 密钥添加到您的 GitH 账号” 。

可以通过使用硬件安全密钥进一步保护 SSH,这要求在使用密钥对进行 SSH 身份验证时,需将物理硬件安全密钥连接到电脑中。也可以通过将密钥添加到 ssh 代理中并使用密码来保护 SSH 密钥。有关详细信息,请参阅 “使用 SSH 密钥密码” 。

若要将 SSH 密钥与使用 SAML 单点登录的组织拥有的仓库一起使用,必须对该密钥进行授权。有关更多信息,请参阅 GitHub 企业云文档中的 “授权 SSH 密钥用于 SAML 单点登录” 。

为了维护账号安全,您可以定期检查您的 SSH 密钥列表,并撤销任何无效或已被破坏的密钥。有关更多的信息,请参见 “检查 SSH 密钥” 。

如果您已经有一年时间没有使用 SSH 密钥,那么,为了以防万一,GitHub 将自动删除您的非活动的 SSH 密钥。有关详细信息,请参见 “删除或丢失的 SSH 密钥” 。

使用 GitHub 企业云的组织可以提供 SSH 证书,其组织成员可以使用该证书访问该组织的仓库,而无需将该证书添加到他们在 GitHub 上的账户中。如果您使用的是 SSH 证书,那么如果该分支属于您的个人账户,则无法使用该证书访问组织仓库的分支。有关更多信息,请参见 GitHub 企业云文档中 “关于 SSH 证书颁发机构” 。

检查现有 SSH 密钥

在生成一个新的 SSH 密钥之前,可以先检查是否已有任何现存的 SSH 密钥。

注意:

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

从那时起,不再支持 DSA 密钥(ssh-dss)。您无法在`GitHub.com`上为您的个人账户添加新的 DSA 密钥。

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

检查步骤:

  1. 打开终端(Mac、Linux)或者打开 Git Bash(windows)。
  2. 输入 ls -al ~/.ssh,查看是否存在现有的 SSH 密钥。
$ ls -al ~/.ssh
# 如果 .ssh 目录中有文件,则会列出这些文件
  1. 检查该目录下的文件列表,看看是否已经有了公共的 SSH 密钥。默认情况下,GitHub 支持的公钥的文件名如下。

    • id_rsa.pub
    • id_ecdsa.pub
    • id_ed25519.pub

    提示:如果您收到一个 ~/.ssh 目录不存在的错误,则表示在默认位置没有存在 SSH 密钥对。
    您可以在下一步中创建一个新的 SSH 密钥对。

  2. 要么生成新的 SSH 密钥,要么上传现有的密钥。

    • 如果您没有支持的公钥和私钥对,或者不希望使用任何可用的密钥对,那么生成一个新的 SSH 密钥。
    • 如果您看到列出了您想要用于连接 GitHub 现有的公钥和私钥对(例如,id_rsa.pub 和 id_rsa),则可以将该密钥添加到 ssh 代理中。

    有关生成新的 SSH 密钥或者向 ssh 代理添加现有密钥的详细信息,请参阅 “生成新的 SSH 密钥并将其添加到 ssh 代理中” 。

生成新的 SSH 密钥并把它添加到 ssh 代理中

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

关于生成 SSH 密钥

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

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

如果您不想在每次使用 SSH 密钥时都重新输入密码,可以将密钥添加到 SSH 代理中,该代理管理 SSH 密钥并记住您的密码。

生成新的 SSH 密钥

  1. 打开终端(Mac 或 Linux)或者打开 Git Bash(windows)。

  2. 粘贴以下的文本,并替换为您的 GitHub 电子邮件地址。

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

    注意: 如果您使用的是不支持 Ed25519 的传统系统,请使用:

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

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

> Generating public/private algorithm key pair.
# 生成公共/私有算法密钥对。
  1. 当提示您“输入保存密钥文件”时,直接按回车。这会接受默认的文件位置。

    > Enter a file in which to save the key (/home/you/.ssh/algorithm): [Press enter]
    # 输入用于保存该密钥的文件(/home/you/.ssh/algorithm):[按回车]
    
  2. 在提示符下,键入一个安全密码。有关详细信息,请参阅 “使用 SSH 密钥密码” 。

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    > Enter same passphrase again: [Type passphrase again]
    # 输入密码(不输入表示没有密码)[键入一个密码]
    # 再次输入密码:[再次键入密码]
    

将 SSH 密钥添加到 ssh 代理中

在向 ssh 代理添加新的 SSH 密钥以管理密钥之前,您应该检查现有的 SSH 密钥,并生成新的 SSH 密钥。

  1. 在后台启动 ssh 代理。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    # 代理进程id为59566
    

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

  2. 把您的 SSH 私钥添加到 ssh 代理中。如果您创建密钥时使用不同的名称,或者添加带有不同名称的现存密钥,则请用您私钥文件名替换以下命令中的 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]"
    

    **注意:**如果命令执行失败,并收到错误 invalid format(无效格式)或 feature not suppoted(功能不支持),那么您可能使用了不支持 Ed25519 算法的硬件安全密钥。改为键入以下命令。

    $ ssh-keygen -t ecdsa-sk -C "[email protected]"
    
  4. 当出现提示时,触摸硬件安全密钥上的按钮。

  5. 当提示“输入保存密钥的文件”时,按回车以接受默认的文件位置。

    > Enter a file in which to save the key (/home/you/.ssh/id_ed25519_sk): [Press enter]
    # 输入用于保存密钥的文件 (/home/you/.ssh/id_ed25519_sk):[按回车]
    
  6. 当提示输入密码时,按回车。

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    # 输入密码(不输入则密码为空):[输入密码]
    > Enter same passphrase again: [Type passphrase again]
    # 再次输入相同的密码:[再次输入密码]
    
  7. 将 SSH 密钥添加到您的 GitHub 账号中。有关更多信息,请参见 “将新的 SSH 密钥添加到您的 GitHub 账号中” 。

将新的 SSH 密钥添加到您的 GitHub 账号中

在 GitHub.com 上配置您的账号以使用新的(或现有的)SSH 密钥,您还需要将该密钥添加到您的账号中。

在将新的 SSH 密钥添加到 GitHub.com 上账号中之前,您必须已经执行以下操作:

  • 检查现有的 SSH 密钥
  • 生成新的 SSH 密钥并添加到 ssh 代理中

在将新的 SSH 密钥添加到 GitHub.com 上您的账号后,您可以重新配置任何本地仓库以便使用 SSH。有关更多信息,请参阅 “将远程 URLs 从 HTTPS 切换到 SSH” 。

注意:2002年3月15日,GitHub通过弃用旧的、不安全的密钥类型以提高安全性。

自那天后,DSA密钥(`ssh-dss`)不再支持。您不能把新的 DSA 密钥添加到 GitHub.com 上的个人账号中。

在2021年11月2日之前,带有 `valid_after` 的RSA密钥(ssh-rsa)可以继续使用任何签名算法。
在那天之后,要生成RSA密钥必须使用 SHA-2 签名算法。一些老的客户端可能需要进行升级以使用 SHA-2 签名。

以下步骤有两种方法,即可以使用 GitHub CLI,或 使用浏览器。

GitHub CLI(命令行接口)

想要了解有关 GitHub CLI 的更多信息,请参见"关于 GitHub CLI" 。

在使用 GitHub CLI 向您的账号添加 SSH 密钥之前,必须对 GitHub CLI 进行身份验证。有关更多信息,请参见 GitHub CLI 文档中的 gh auth login。

要向 GitHub 账号中添加 SSH 密钥,请使用 ssh-key add 子命令,并指定公钥。

gh ssh-key add key-file

若要为新的密钥包含一个标题,请使用 -t--titile 标志。

gh ssh-key add key-file --titile "personal laptop"

如果您是按照 “生成一个新的 SSH 密钥” 中的说明生成了 SSH 密钥,那么您可以使用以下命令将该密钥添加到您的账号中。

gh ssh-key add ~/.ssh/id_ed25519.pub
浏览器
  1. 拷贝 SSH 公钥到剪贴板。

    如果您的 SSH 公钥文件的名称与示例代码中的不同,请修改文件名以匹配当前设置。在复制密钥时,不要添加任何新行或空格。

    Mac 中使用以下命令:

    $ pbcopy < ~/.ssh/id_ed25519.pub
    # 将 id_ed25519.pub文件拷贝到剪贴板中
    

    提示:如果 pbcopy 不起作用,则您可以切换到隐藏的 .ssh 文件夹中,使用您喜欢文本编辑器打开该文件,然后复制内容到剪贴板中。

    windows 中使用以下命令:

    $ clip < ~/.ssh/id_ed25519.pub
    # 将 id_ed25519.pub文件拷贝到剪贴板中
    

    提示:如果 clip 不起作用,则您可以切换到隐藏的 .ssh 文件夹中,使用您喜欢文本编辑器打开该文件,然后复制内容到剪贴板中。

    Linux 中使用以下命令:

    $ cat ~/.ssh/id_ed25519.pub
    # 然后选择终端上显示的id_ed25519.pub文件内容,并复制到剪贴板
    

    提示:或者,您可以切换到隐藏的 .ssh 文件夹中,使用您喜欢文本编辑器打开该文件,然后复制内容到剪贴板中。

  2. 在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(配置)。

使用 SSH 连接 GitHub_第1张图片

  1. 在左侧边栏的 “Access” 节,点击 SSH and GPG keys

    使用 SSH 连接 GitHub_第2张图片

  2. 单击 New SSH key 或者 Add SSH key

    使用 SSH 连接 GitHub_第3张图片

  3. Title 字段中,为新密钥填入描述性的标签。例如,如果您使用的是个人 Mac,则你可能称呼这个密钥为 personal MacBook Air

  4. 粘贴您的密钥到 key 字段中。

    使用 SSH 连接 GitHub_第4张图片

  5. 点击 Add SSH key

    在这里插入图片描述

  6. 如果有提示,请确认您的 GitHub 密码。

    使用 SSH 连接 GitHub_第5张图片

测试 SSH 连接

在设置好 SSH 密钥并将其添加到 GitHub.com 上的账号后,您可以测试连接。

在进行 SSH 连接测试前,您应该已经完成以下步骤:

  • 检查现有的 SSH 密钥
  • 生成新的 SSH 密钥
  • 将新的 SSH 密钥添加到您的 GitHub 账号中

在测试连接时,需要使用您的密码验证此操作,该密码是您在前面创建 SSH 密钥的密码。有关使用 SSH 密钥的密码,请参阅 “使用 SSH 密钥密码” 。

  1. 打开终端(Mac 或 Linux),或打开 Git Bash

  2. 输入以下命令:

    $ ssh -T [email protected]
    # 试图通过 ssh 连接 GitHub
    

    你可能会看到如下的警告:

     > The authenticity of host 'github.com (IP ADDRESS)' can't be established.
     > RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
     > Are you sure you want to continue connecting (yes/no)?
    
     # 无法确定主机 'github.com (IP 地址)'的真实性。RSA密钥指纹是 SHA256:......
     # 您确定要继续连接(是/否)?
    
  3. 验证您看到的指纹是否与 GitHub 的公钥指纹匹配。如果匹配,那么输入 yes

    > Hi username! You've successfully authenticated, but GitHub does not
    > provide shell access.
    # 嘿 您的姓名!您已经成功地进行了身份认证,但是GitHub不提供 shell 访问。
    

    您可能会看到如下的错误信息:

    ...
    Agent admitted failure to sign using the key.
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    
    # 代理接受使用该密钥签名失败。
    # debug1:不必再尝试身份验证方法。
    # 权限拒绝(公钥)。
    

    这是某些 Linux 发行版的一个已知问题。有关更多信息,请参见 “错误:代理承认签名失败” 。

  4. 验证结果消息是否包含您的用户名。如果您收到“权限拒绝”消息,请参阅 “错误:权限拒绝(公钥)” 。

使用 SSH 密钥密码

可以保护 SSH 密钥并配置身份验证代理,这样您就不必再每次使用 SSH 密钥时重新输入密码。

使用 SSH 密钥,如果有人获得了对您的电脑的访问权限,则他们也将获得对使用该密钥的每个系统的访问权限。想要增加额外的安全层,可以在 SSH 密钥中添加密码。您可以使用 ssh-agent 安全地保存密码,这样就不必重新输入密码。

增加或修改密码

通过键入以下命令,您可以修改现有私钥的密码,而无需重新生成密钥对:

$ ssh-keygen -p -f ~/.ssh/id_ed25519
> Enter old passphrase: [Type old passphrase]
> Key has comment '[email protected]'
> Enter new passphrase (empty for no passphrase): [Type new passphrase]
> Enter same passphrase again: [Repeat the new passphrase]
> Your identification has been saved with the new passphrase.

如果您的密钥已经有了密码,那么会提示输入旧密码,然后您可以更改为新的密码。

Mac 中在密钥链中保存密码

在 Mac OS X Leopard 上通过 OS X El Capitan 自动处理这些默认私钥文件:

  • .ssh/id_rsa
  • .ssh/identity

第一次使用密钥时,系统会提示您输入密码。如果您选择使用密钥链保存密码,则不必再次输入。

否则,在将密钥添加到 ssh-agent 时,可以将密码存储在密钥链中。有关更多信息,请参见 “将 SSH 密钥添加到 ssh-agent 中” 。

在 Git for windows 上自动启动 ssh-agent

当打开 bash 或 Git shell 时,会自动运行 ssh-agent。复制以下代码,并粘贴到 Git shell 中的 ~/.profile~/.bashrc

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ;
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

如果您的私钥没有存储在默认位置(例如 ~/.ssh/id_rsa ),您需要告诉 SSH 身份验证代理在哪里找到它。要将密钥添加到 ssh-agent 中,键入 ssh-add ~/path/to/my_key 。有关更多信息,请参见 “生成新的 SSH 密钥并将其添加到 ssh-agent 中” 。

提示:如果希望ssh-agent在一段时间后忘记您的密钥,可以通过运行 `ssh-add -t ` 来配置它。

至此,当您第一次运行 Git Bash 时,系统会提示您输入密码:

> Initializing new SSH agent...
> succeeded
> Enter passphrase for /c/Users/you/.ssh/id_rsa:
> Identity added: /c/Users/you/.ssh/id_rsa (/c/Users/you/.ssh/id_rsa)
> Welcome to Git (version 1.6.0.2-preview20080923)
>
> Run 'git help git' to display the help index.
> Run 'git help ' to display help for specific commands.

ssh-agent 进程将继续运行,直到您注销、关闭电脑或终止该进程。


原文地址:使用SSH连接GitHub

你可能感兴趣的:(git,Linux,windows,github,ssh,git)