前言
参考官方文档:GitHub 入门文档
本文介绍了 GitHub 的两种身份验证方式:个人访问令牌(PAT)和 SSH 密钥。详细说明了 PAT 的类型(精细化与经典)、创建步骤及权限配置,以及如何在命令行和 IDE 中使用。同时讲解了 SSH 密钥的生成、上传至 GitHub 及测试连接的方法,对比了两者在安全性与便捷性上的差异,帮助开发者选择合适的认证方案。

参考官方文档:GitHub 入门文档
Github 通过 Git CLI 方式进行管理,常用的身份验证的方式为 PAT 和 SSH,可以单独分别使用,没有相关联系。
**个人访问令牌(Personal Access Token)是 GitHub 提供的一种用于替代密码的安全凭证。**可以把它理解为:一个用于访问 GitHub API、推送代码、克隆仓库的'一次性密码/授权密钥'。
自 2021 年之后:
✔ 1. 更安全
密码权限太大且不方便管理,PAT 权限可控,可以随时撤销。
✔ 2. 可以设置不同的权限范围
如:
权限越小越安全。
✔ 3. 可以指定过期时间
不会像密码那样无限生效。
✔ 4. 可以随时撤销某个设备或脚本用的 PAT
避免泄露后无法追踪。
GitHub 有两个不同版本:
当前 GitHub 主推的方式。
特点:
适合 绝大多数开发者。
旧版,还能用,但不推荐,操作简单,初学者可以尝试。
特点:
⭐ 3) 传统令牌 vs 细粒度令牌:
一共分「创建令牌」和「使用令牌」两步。
先通过「用户名 + 密码」登录 GitHub(参考上面的教程)。
✍️核心配置项说明:
| 配置项 | 作用与建议 |
|---|---|
| Note | 填写令牌用途说明(如'Git HTTPS 推送认证'),方便后续区分不同令牌的用途。 |
| Expiration | 选择令牌有效期(默认 30 天),建议根据场景选择(短期任务选短时效,长期服务选长时效),过期需重新生成。 |
| Select scopes(权限范围) | 需勾选对应权限以赋予令牌能力,常见场景配置如下:- Git 推送 / 拉取:勾选 repo(私有仓库完全控制)或 public_repo(公共仓库控制);- GitHub Actions 工作流:勾选 workflow;- 包管理(如 GitHub Packages):勾选 write:packages、read:packages 等;- 用户信息操作:勾选 user 下的 read:user 等。建议遵循'最小权限原则',仅勾选必要权限。 |
✍️核心配置项说明:
| 配置项 | 作用与建议 |
|---|---|
| Token name | 填写令牌名称(如'前端项目 API 访问令牌'),用于区分不同用途的令牌,建议语义化命名。 |
| Description | 选填项,可描述令牌用途(如'用于本地 Git 推送 HTTPS 认证'),方便后续管理。 |
| Resource owner | 默认关联你的 GitHub 账号(如 zhengjingjiaozhu),确保令牌仅操作你名下的资源。 |
| Expiration | 选择令牌有效期(默认 30 天),建议根据使用场景选择(短期任务选短时效,长期服务选长时效),过期后需重新生成。 |
| Repository access | 选择仓库访问范围:- Public repositories:仅只读访问公共仓库;- All repositories:访问你所有仓库(含公共和私有);- Only select repositories:仅访问指定仓库(最多 50 个)。建议遵循'最小权限原则',按需选择范围。 |
| Permissions | 点击「+ Add permissions」可添加细分权限(如仓库的'Read and write'、Issues 的'Read-only'等),需根据实际需求配置(如 Git 推送需仓库的写权限)。 |
⚠️若未保存,只能重新生成新令牌,旧令牌会失效。
例如:克隆 GitHub 仓库、推送代码到远程仓库。
输入克隆命令(从 GitHub 仓库复制的 HTTPS 地址):
git clone https://github.com/你的用户名/你的仓库名.git
第一次验证后,系统会自动保存凭证(Windows 保存在凭据管理器,Mac 保存在钥匙串),后续执行 git push、git pull 时无需重复输入。
点击左侧菜单栏的「源代码管理」图标(或按 Ctrl+Shift+G)。
SSH(Secure Shell)是一种安全加密协议,用于安全登录和数据传输。SSH 密钥认证是一种不需要输入密码的加密登录方式。可以把它理解为:一个用来证明'你就是你'的身份证明文件。
它由两部分组成:
只要私钥和公钥匹配,你的电脑就可以'证明身份',无需密码即可 git push / pull。
| 方式 | 需要输入密码? | 安全性 | 使用场景 |
|---|---|---|---|
| HTTPS + PAT | 第一次 push 要输入 Token | 高 | 脚本/工具/CI |
| SSH 密钥 | 不需要输入密码(或仅输入一次 passphrase) | 非常高 | 程序员日常开发最推荐 |
SSH 最大的好处就是:
✔ 可替代「PAT」,push / pull 不用每次输入 Token
✔ 密钥可以长期使用,一次配置,永久免输凭证(无需每次复制 PAT)
✔ 更适合集成开发环境(VSCode / IDEA)
一共分「生成密钥→上传公钥→测试使用」三步。
输入以下命令,查看是否存在密钥文件:
# CMD 方法 1:使用 dir 命令
dir %USERPROFILE%\.ssh
# CMD 方法 2:直接导航到目录
cd %USERPROFILE%\.ssh
dir
# PowerShell 中
Get-ChildItem ~\.ssh
# git bash/Mac/Linux 通用
ls -al ~/.ssh
id_rsa(私钥)和 id_rsa.pub(公钥),说明已有密钥,可直接跳到「上传公钥」步骤;输入以下命令,替换为你的 GitHub 绑定邮箱(用于标识密钥):
# 使用更安全的 Ed25519 算法
ssh-keygen -t ed25519 -C "[email protected]"
# 或者使用 RSA(如果系统较旧)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
常用选项说明:
密钥类型比较
| 类型 | 命令示例 | 安全性 | 性能 | 兼容性 | 推荐场景 |
|---|---|---|---|---|---|
| Ed25519 | ssh-keygen -t ed25519 -C "email" | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 首选,现代系统 |
| ECDSA | ssh-keygen -t ecdsa -b 256 -C "email" | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 中等安全需求 |
| RSA | ssh-keygen -t rsa -b 4096 -C "email" | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | 老旧系统兼容 |
| 选项 | 说明 |
|---|---|
-t type | 指定密钥类型(如 ed25519, rsa, ecdsa) |
-b bits | 指定密钥长度(位数) |
-C comment | 添加注释,通常用邮箱标识密钥所有者 |
-f filename | 指定密钥文件保存路径和名称 |
-p | 更改私钥的密码(不更改私钥本身) |
-y | 从私钥生成对应的公钥 |
-q | 静默模式,不显示提示信息 |
执行后会出现三次交互,全部按回车默认即可(无需手动输入):
~/.ssh/id_rsa,无需修改);再次执行「检查密钥」命令
若能看到下面两个文件,说明生成成功:
| 文件 | 内容 | 用途 | 分享安全性 |
|---|---|---|---|
id_ed25519 | 私钥 | 保存在本地,绝对保密 | 🚫 绝不分享 |
id_ed25519.pub | 公钥 | 上传到 GitHub/服务器 | ✅ 可以安全分享 |
🔖提示:ssh-keygen 更多命令见附录
🔑方式一:直接查看公钥文件,拷贝密钥
在 C:\Users\当前用户.ssh 下面,用文本编辑器打开公钥文件,拷贝以 ssh 开头的整行字符串,备用
🔑方式二:使用命令查看:
Mac/Linux:
#换成你的公钥文件名
pbcopy < ~/.ssh/yourfilename.pub # 直接复制到剪贴板,无需手动选中
Windows:
cat ~/.ssh/yourfilename.pub #换成你的公钥文件名
执行后,终端会输出一串以 ssh 开头、以你的邮箱结尾的整行字符串(这就是公钥),完整复制这串字符(包括开头的 ssh-rsa 和结尾的邮箱)。
ssh -T [email protected]
这是 GitHub 官方提供的测试命令,用于验证本地 SSH 能否与 GitHub 服务器正常通信。
✍️提示:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established...);yes 并回车(无需输入其他内容)。🤔💡可能出现的错误: 检查: 一看解析不对,关闭了 Watt Toolkit,结果就正常了。
git push git pull 也无需验证,自动通过 SSH 密钥授权。终端执行克隆命令:
git clone [email protected]:你的用户名/你的仓库名.git
打开 GitHub 目标仓库页面,点击「Code」按钮,切换到「SSH」标签,复制 SSH 地址(格式:[email protected]:用户名/仓库名.git);
id_rsa)是核心凭证,绝对不要分享给他人、不要上传到代码仓库(泄露会导致账户被恶意操作);ssh -vT [email protected](加 -v 查看详细日志),排查公钥配置或网络问题。# 更改密钥密码
ssh-keygen -p -f ~/.ssh/id_ed25519
# 查看密钥指纹
ssh-keygen -l -f ~/.ssh/id_ed25519
# 查看密钥指纹(MD5 格式)
ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519
# 从私钥重新生成公钥
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
# 检查密钥指纹
ssh-keygen -l -f ~/.ssh/id_ed25519
# 检查密钥类型和长度
ssh-keygen -l -f ~/.ssh/id_ed25519 | awk '{print $4, $5}'
# 验证密钥格式
ssh-keygen -e -f ~/.ssh/id_ed25519.pub
# 测试 SSH 连接到 GitHub
ssh -T [email protected]
# 使用特定密钥测试
ssh -T -i ~/.ssh/github [email protected]
# 详细模式查看连接过程
ssh -T -v [email protected]
# 错误:Permissions are too open
chmod 600 ~/.ssh/your_private_key
# 错误:Key format not supported
# 重新生成密钥或转换格式
ssh-keygen -p -m PEM -f ~/.ssh/old_key
# 错误:No such file or directory
# 检查文件路径和名称
ls -la ~/.ssh/

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online