Git 0X - GitHub Access Authentication
# 前置知识
在阅读本文档前,请先确保你已完成 Git 的初始化配置,详见 Git 的 02 - Getting Started 文档。
# 前言
访问 GitHub 中的资源的方式有很多,包括浏览器、GitHub Desktop APP 、Git API 或通过命令行。为保证账户安全和资源安全,访问 GitHub 资源时必须进行 身份验证 (authentication) ,而每种访问方式都支持不同的身份验证方式。
本文汇总了通过命令行访问 GitHub 仓库时所用的各种身份验证方式,这也是开发者最常用的访问 GitHub 仓库的方式。有关其它访问方式的身份验证方式,请参阅 GitHub Docs - About authorization to GitHub (opens new window) 。
# 命令行访问
通过命令行访问 GitHub 仓库有 HTTPS 和 SSH 两种方式,取决于访问远程仓库时所用的 remote URL 。二者有不同的身份验证方式。
HTTPS URL 形如
https://github.com/<user>/<repo>.git
。SSH URL 形如
git@github.com:<user>/<repo>.git
。
本文不包含使用 GitHub CLI 时可用的身份验证方式(因为我自己不用这个)。有关 GitHub CLI 的更多信息,请参阅 GitHub CLI - Manual (opens new window) 。
# HTTPS
通过 HTTPS 可以始终访问 GitHub 上的所有仓库(即使位于防火墙或代理之后)。
# 账号密码访问(已废弃)
在过去,HTTPS 访问允许使用账号密码访问 GitHub 仓库,但现在这种方式已被废弃,只允许使用令牌访问。
自 2021.8.13 开始,GitHub 将不再允许使用账号密码作为 Git 操作的身份验证方式,而只允许基于令牌或基于 SSH 的身份验证。根据官方的描述,这主要是出于安全性的考虑,令牌相较于密码有许多安全优势,详见 GitHub Blog - Token authentication requirements for Git operations (opens new window) 。
# Personal Access Token
基于密码的 GitHub 身份验证已被废弃。当 Git 提示你输入密码时,请输入你的 个人访问令牌 (personal access token, PAT) 。
- 如果系统未提示输入账号密码,则你的计算机上已有缓存凭据。你可以更新凭据以使用 PAT 替换掉旧密码。
有关创建和管理 PAT 的方式,请参阅 GitHub Docs - Creating a personal access token (opens new window) 。
GitHub 网页右上角的个人资料照片 → Settings → Developer Settings → Personal Access Tokens → ……
注意,创建得到 PAT 后需要将其拷贝并另行存储,GitHub 不会第二次告知你 PAT 的内容,一旦丢失则只能重新创建。
注意,使用 PAT 时要将其视为密码并保密。
每次使用 Git 时都需要输入 PAT 进行身份验证,这在个人计算机上通常是不必要的,我们不需要这么麻烦的安全保护。有两种方式可以解决此问题。
第一种方式是将 PAT 编码到 remote URL 中,即使用 https://<token>@github.com/<user>/<repo>.git
作为 HTTPS URL 。也可以将 PAT 用作环境变量(例如 $PAT
)然后使用 https://$PAT@github.com/<user>/<repo>.git
。
第二种方式是利用 GitHub CLI 或 Git Credential Manager 来缓存 PAT ,详见 GitHub Docs - Caching your GitHub credentials in Git (opens new window) 。
# SSH
通过 SSH 可以访问 GitHub 上的所有仓库,但是防火墙和代理可能会拒绝 SSH 连接。
假设你已经完成了对 Git 用户名和邮箱的全局配置,则通过以下几步即可快速创建并使用 SSH key 。
首先在本机创建新的 SSH key :
可以执行如下命令:
ssh-keygen -t rsa -C "your_email@example.com"
除非有特殊需求,所有选项可一路回车默认。
然后将生成的 SSH key 添加到你的 GitHub 账户中:
打开 ~/.ssh/id_rsa.pub
文件(Windows 在对应用户的“我的文档”目录下),复制其中的全部内容。
GitHub 网页右上角的个人资料照片 → Settings → SSH and GPG keys → New SSH key → 将密钥内容复制到 Key 字段中
测试 SSH 连接是否成功建立:
可以执行如下命令:
ssh -T git@github.com
你可能会看到如下警告信息,输入 yes
回车即可:
You may see a warning like this:
> 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 仓库时使用对应的 SSH URL 即可。
上述流程中如果遇到任何特殊问题,请参阅:
GitHub Docs - Generating a new SSH key and adding it to the ssh-agent (opens new window)
GitHub Docs - Adding a new SSH key to your GitHub account (opens new window)
GitHub Docs - Testing your SSH connection (opens new window)
此外,如果需要检查本机是否已有 SSH key :
可以执行如下命令:
ls -al ~/.ssh
如果提示目录不存在,或目录下没有 id_rsa.pub
、id_ecdsa.pub
或 id_ed25519.pub
文件,则本机不存在已有的 SSH key 。
- 01
- Reading Papers - Kernel Concurrency06-01
- 02
- Linux Kernel - Source Code Overview05-01
- 03
- Linux Kernel - Per-CPU Storage05-01