文章目录导航12节
GitHub SSH 密钥配置与 Personal Access Token (PAT) 认证指南
在使用 Git 向 GitHub 提交代码或拉取私有仓库时,身份鉴权是必经的第一步。
自 2021 年 8 月起,GitHub 已全面移除对账户密码直接进行 Git 操作的支持(若使用密码会收到 remote: Support for password authentication was removed on August 13, 2021. 错误)。目前官方推荐的两大主流认证方式为:SSH 密钥认证 与 Personal Access Token (PAT 个人访问令牌)。
本教程将手把手带你完成两种认证方式的配置与日常故障排查。
一、SSH 密钥认证全流程配置
SSH(Secure Shell)通过非对称加密算法进行身份识别。本地保留私钥,公钥上传到 GitHub,每次 git clone [email protected]:... 或 git push 时均无需重复输入密码,安全且高效。
1. 检查本地是否已有 SSH 密钥
在终端(Linux/macOS 的 Terminal,或 Windows 的 Git Bash / PowerShell)中执行:
ls -la ~/.ssh
如果输出中已有形如 id_ed25519.pub 或 id_rsa.pub 的文件,说明已经生成过密钥,可直接跳至步骤 3;如果提示目录不存在或没有任何 .pub 结尾的文件,请继续步骤 2。
2. 生成全新的 SSH 密钥对
推荐算法:优先推荐现代高安全性且运算更快的 Ed25519 算法;若所处老旧系统不支持,可退选 RSA 4096 算法。
执行以下命令生成密钥(将邮箱替换为你的 GitHub 注册邮箱):
# 推荐:生成 Ed25519 密钥
ssh-keygen -t ed25519 -C "[email protected]"
# 备选:如果系统较老,生成 4096 位 RSA 密钥
ssh-keygen -t rsa -b 4096 -C "[email protected]"
命令行会依次出现三个提示:
Enter file in which to save the key (/home/user/.ssh/id_ed25519):- **直接按回车(Enter)**使用默认路径即可。
Enter passphrase (empty for no passphrase):- 设置密钥密码(若个人电脑希望完全免密,直接按回车留空;若追求最高安全性可输入密码)。
Enter same passphrase again:- 再次按回车确认。
3. 将 SSH 公钥添加到 GitHub
-
查看并复制公钥内容:
# 查看 Ed25519 公钥内容 cat ~/.ssh/id_ed25519.pub # 或者若为 RSA: cat ~/.ssh/id_rsa.pub复制终端输出的整行字符串(以
ssh-ed25519或ssh-rsa开头,以你的邮箱结尾)。 -
打开 GitHub 网站并登录:
- 点击右上角个人头像 -> Settings(设置)。
- 在左侧侧边栏中找到并点击 SSH and GPG keys。
- 点击绿色的 New SSH key(添加新 SSH 密钥)。
- Title:给这个密钥起一个有辨识度的名字(如
MacBook-Pro-Work、Home-Desktop)。 - Key type:保持默认的
Authentication Key。 - Key:将前面复制的完整公钥内容粘贴进去。
- 点击 Add SSH key 保存。
4. 测试 SSH 连通性
在终端运行以下测试命令:
ssh -T [email protected]
首次连接时会提示服务器指纹信息:
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuKeo9g...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 并按回车。
若配置成功,将看到友好的欢迎信息:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
这表明你的 SSH 密钥已成功与 GitHub 绑定!
二、Personal Access Token (PAT) 配置
如果你习惯使用 HTTPS 地址(如 https://github.com/username/repo.git),或者在不支持 SSH 的 CI/CD 容器中,需要使用 Personal Access Token (PAT) 代替传统密码。
1. 生成 Personal Access Token
GitHub 提供两种 Token:
- Fine-grained personal access tokens(细粒度令牌,推荐):支持按具体仓库和具体权限最小化授权。
- Tokens (classic)(经典令牌):全局范围授权,兼容性好。
以经典令牌为例:
- 访问 GitHub -> 右上角头像 -> Settings -> 页面最底部左侧 Developer Settings。
- 选择 Personal access tokens -> Tokens (classic)。
- 点击 Generate new token -> Generate new token (classic)。
- 填写配置项:
- Note:令牌用途(例如
VSCode-Desktop、Ubuntu-Server)。 - Expiration:有效期(建议选择 30/60/90 天或按需自定义)。
- Select scopes:勾选权限。对于日常 Git 提交,必须勾选
repo(全部仓库访问权限);若需要管理工作流可勾选workflow。
- Note:令牌用途(例如
- 点击底部绿色的 Generate token。
- 重要:生成后立即复制屏幕上的 Token(形如
ghp_xxxxxxxxxxxxxxxxxxxx)。离开该页面后将无法再次查看!
2. 在 Git 中使用 PAT 并配置凭据持久化
为了避免每次 git push 都需要手动复制粘贴长长的 Token,建议启用本地凭据管理器:
# Windows 系统(默认启用 Windows 凭据管理器):
git config --global credential.helper manager
# macOS 系统(保存到系统钥匙串 Keychain):
git config --global credential.helper osxkeychain
# Linux 系统(保存到本地加密或明文文件):
git config --global credential.helper store
配置后,在下次执行 git push 时:
- Username:输入你的 GitHub 用户名。
- Password:输入你刚才生成的 Personal Access Token (
ghp_...)。
凭据将被安全保存在本地,后续操作无需再次输入。
三、常见问题与报错排查(FAQ)
Q1: Permission denied (publickey). fatal: Could not read from remote repository.
原因分析:本地 SSH Agent 没有加载密钥,或者使用的公钥与 GitHub 上的不一致。
解决步骤:
- 确认密钥文件权限是否过宽(Linux/macOS 对权限要求严格):
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub - 将私钥添加到系统的 ssh-agent 中:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519
Q2: 电脑上有多个 GitHub 账号(如个人账号和公司账号),如何隔离?
在 ~/.ssh/ 目录下创建并编辑 config 文件:
# 个人账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
# 公司/工作账号
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
在克隆工作仓库时,只需将域名替换为配置的别名:
git clone git@github-work:company-org/project.git
Q3: 使用 HTTPS 方式克隆时网络太慢甚至连接超时怎么办?
若在拉取公共开源项目时遇到 HTTPS 网络超时,可以借助 GH-Proxy 加速下载:
# 原始命令
git clone https://github.com/torvalds/linux.git
# 结合 GH-Proxy 高速克隆
git clone https://gh-proxy.com/https://github.com/torvalds/linux.git
更多加速规则与全局重定向配置,可参考 Git 客户端全局配置。