使用 SSH 连接 GitHub

10 篇文章 1 订阅
6 篇文章 1 订阅
本文详述了如何使用SSH连接GitHub的全过程,包括检查现有SSH密钥、生成新的SSH密钥、将其添加到ssh代理,以及如何在GitHub上添加SSH密钥。此外,还介绍了如何为硬件安全密钥创建SSH密钥,设置SSH密钥密码,以及在Mac和Windows上管理SSH密码。最后,提供了测试SSH连接的方法,确保安全连接。
摘要由CSDN通过智能技术生成

使用 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 "your_email@example.com"
    

    注意: 如果您使用的是不支持 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 "your_email@example.com"
    

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

    $ ssh-keygen -t ecdsa-sk -C "your_email@example.com"
    
  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 密钥添加到 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(配置)。

在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

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

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

    在这里插入图片描述

  5. 点击 Add SSH key

    在这里插入图片描述

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

    在这里插入图片描述

测试 SSH 连接

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

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

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

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

  2. 输入以下命令:

    $ ssh -T git@github.com
    # 试图通过 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 'your_email@example.com'
> 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 <seconds>` 来配置它。

至此,当您第一次运行 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值