【Git】Git05-03:Github身份验证方式PAT和SSH

📚前言

官方文档: GitHub 入门文档 - GitHub 文档

关于国内访问github访问的速度问题,请参考:加速github访问速度方法:Watt Toolkit


**第五章·第三部分:**Github身份验证方式PAT和SSH

Github通过Git CLI方式进行管理,常用的身份验证的方式为有PAT和SSH,可以单独分别使用,没有相关联系。

一、🔐PAT简介

1.1 什么是个人访问令牌(PAT)?

**个人访问令牌(Personal Access Token)是 GitHub 提供的一种用于替代密码的安全凭证。**可以把它理解为:一个用于访问 GitHub API、推送代码、克隆仓库的"一次性密码/授权密钥"。

自 2021 年之后:

  • GitHub 不再允许命令行使用账户密码登录

  • 在 git push、git pull、clone 时必须使用:

    ✔ 2FA

    ✔ 个人访问令牌(PAT)

    ✔ SSH Key

    ✔ 或 GitHub CLI 登录

1.2 为什么需要 PAT?(关键原因)

✔ 1. 更安全

密码权限太大且不方便管理,PAT 权限可控,可以随时撤销。

✔ 2. 可以设置不同的权限范围

如:

  • 只允许读仓库

  • 允许推送

  • 允许管理 actions

  • 允许删除包

权限越小越安全。

✔ 3. 可以指定过期时间

不会像密码那样无限生效。

✔ 4. 可以随时撤销某个设备或脚本用的 PAT

避免泄露后无法追踪。

1.3 核心用途

  • 替代「密码」,用于 命令行(git 操作)、第三方工具(VS Code、Git 客户端、API 调用) 访问 GitHub。
  • 例如:用 git clone/push/pull 命令操作远程仓库、用 VS Code 直接连接 GitHub 仓库、调用 GitHub API 获取数据。

1.4 适用场景

  • 本地电脑用 git 命令操作 GitHub 仓库(最常用);
  • 第三方工具(如 PyCharm、Sourcetree)授权访问 GitHub;
  • 开发时调用 GitHub API(如获取仓库列表、提交记录)。

1.5 两种类型的 PAT

GitHub 有两个不同版本:

1) Fine-grained personal access tokens(精细化令牌)------推荐使用

当前 GitHub 主推的方式。

特点:

  • 可以精确指定仓库权限(例如只给一个仓库读写权限)

  • 可以设置细粒度操作权限

  • 更安全

  • 默认过期

适合 绝大多数开发者

2) Classic personal access tokens(经典令牌)

旧版,还能用,但不推荐,操作简单,初学者可以尝试。

特点:

  • 权限范围更大(风险高)

  • 无法指定到单仓库

  • 常用于一些旧工具、CI、脚本

3) 传统令牌 vs 细粒度令牌

  • 传统令牌权限范围更宽泛,适合需要跨模块权限(如同时操作仓库和用户信息)的场景;
  • 细粒度令牌权限更精细,适合仅需操作特定仓库或功能的场景。

二、🧩PAT具体使用

一共分「创建令牌」和「使用令牌」两步。

2.1 创建个人访问令牌

步骤 1:登录 GitHub 网页端

先通过「用户名 + 密码」登录 GitHub(参考上面的教程)。

步骤 2:进入「个人访问令牌」设置页
  • 点击页面右上角的「头像」→ 选择「Settings」(设置);
  • 在左侧菜单栏下拉,找到「Developer settings」(开发者设置)→ 点击进入;
  • 左侧选择「Personal access tokens」→
    • 点击「Fine-grained tokens」(精细化令牌)
    • 点击「Tokens (classic)」(经典令牌,初学者优先选这个,简单易操作);
  • 点击右上角的「Generate new token」(生成新令牌)。
    • 「Fine-grained tokens」 (精细化令牌)界面
      • ✍️核心配置项说明:

        配置项 作用与建议
        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_pat_开头, 格式类似于:**github_pat_**12BPJ3BRI0bJ6UqkhFHYVE_g0ezYvkoQt7m9ciYQBJAsnkmNNJjpFKDCSLRC1ILnzHBXCKRCFST7pa3cRv

      • **⚠️注意:**令牌仅显示一次,需立即复制保存,后续可在 "Personal access tokens" 列表中管理已生成的令牌。

    • 「Tokens (classic)」 (经典令牌)界面
      • ✍️核心配置项说明:

        配置项 作用与建议
        Note 填写令牌用途说明(如 "Git HTTPS 推送认证"),方便后续区分不同令牌的用途。
        Expiration 选择令牌有效期(默认 30 天),建议根据场景选择(短期任务选短时效,长期服务选长时效),过期需重新生成。
        Select scopes(权限范围) 需勾选对应权限以赋予令牌能力,常见场景配置如下:- Git 推送 / 拉取 :勾选 repo(私有仓库完全控制)或 public_repo(公共仓库控制);- GitHub Actions 工作流 :勾选 workflow;- 包管理(如 GitHub Packages) :勾选 write:packagesread:packages 等;- 用户信息操作 :勾选 user 下的 read:user 等。建议遵循 "最小权限原则",仅勾选必要权限。
      • 密码以ghp_开头,格式类似于

        • ghp_c45FN6pao2C9nUaZYhspDFeAZNa86O3hOtok
      • **⚠️注意:**令牌仅显示一次,需立即复制保存。

⚠️若未保存,只能重新生成新令牌,旧令牌会失效。

2.2 使用个人访问令牌(实际场景)

场景 1:命令行(git 操作)------ 最常用

例如:克隆 GitHub 仓库、推送代码到远程仓库。

步骤 1:打开本地命令行(git bash/终端 / CMD)
  • Windows:按 Win+R,输入 cmd 打开命令提示符;
  • Mac/Linux:打开 Terminal(终端)。
步骤 2:执行 git 命令(以 git clone 为例)

输入克隆命令(从 GitHub 仓库复制的 HTTPS 地址):

bash

复制代码
git clone https://github.com/你的用户名/你的仓库名.git
步骤 3:输入凭证验证
  • 命令执行后,会弹出窗口要求输入「用户名」和「密码」:
    • 用户名:输入你的 GitHub 用户名;
    • 密码:粘贴你刚才生成的 PAT(不是登录密码!);
  • 点击确认,即可成功克隆仓库。
后续操作(git push/pull)

第一次验证后,系统会自动保存凭证(Windows 保存在凭据管理器,Mac 保存在钥匙串),后续执行 git push、git pull 时无需重复输入。

场景 2:VS Code 中授权访问 GitHub
步骤 1:在 VS Code 中打开「源代码管理」

点击左侧菜单栏的「源代码管理」图标(或按 Ctrl+Shift+G)。

步骤 2:连接 GitHub
  • 点击「克隆仓库」→ 粘贴 GitHub 仓库的 HTTPS 地址;
  • 选择本地保存路径;
  • 弹出凭证窗口时,输入「GitHub 用户名」和「PAT」,即可成功连接。

三、🔐SSH 密钥认证简介

3.1 什么是 SSH 密钥认证?

SSH(Secure Shell)是一种安全加密协议,用于安全登录和数据传输。SSH 密钥认证是一种不需要输入密码的加密登录方式。可以把它理解为:一个用来证明"你就是你"的身份证明文件。

它由两部分组成:

  • 私钥(private key) ------ 保存在你的电脑,不可泄露

  • 公钥(public key) ------ 上传到 GitHub

只要私钥和公钥匹配,你的电脑就可以"证明身份",无需密码即可 git push / pull

3.2 SSH 认证与 HTTPS + PAT 的区别

方式 需要输入密码? 安全性 使用场景
HTTPS + PAT 第一次 push 要输入 Token 脚本/工具/CI
SSH 密钥 不需要输入密码(或仅输入一次 passphrase) 非常高 程序员日常开发最推荐

SSH 最大的好处就是:

✔ 可替代「PAT」,push / pull 不用每次输入 Token

✔ 密钥可以长期使用,一次配置,永久免输凭证 (无需每次复制 PAT)

✔ 更适合集成开发环境(VSCode / IDEA)

3.3适用场景

  • 频繁用 git 命令(clone/push/pull)操作 GitHub 仓库(比 PAT 更方便);
  • 本地工具(VS Code、Git 客户端、PyCharm)连接 GitHub 仓库(支持 SSH 地址的场景);
  • 追求「免密操作」的高效开发场景。

四、 🧩SSH具体操作

一共分「生成密钥→上传公钥→测试使用」三步。

4.1 生成 SSH 密钥对(本地操作)

步骤 1:打开终端 / 命令行
  • Windows:git bash/CMD / PowerShell;
  • Mac/Linux:直接打开 Terminal。
步骤 2:检查本地是否已有 SSH 密钥(避免重复生成)

输入以下命令,查看是否存在密钥文件:

复制代码
# CMD方法1:使用 dir 命令
dir %USERPROFILE%\.ssh

# CMD方法2:直接导航到目录
cd %USERPROFILE%\.ssh
dir

#  PowerShell 中
Get-ChildItem ~\.ssh

# git bash/Mac/Linux 通用
ls -al ~/.ssh
复制代码
git bash 执行参考界面:

CMD执行界面参考:

  • 若输出中包含 id_rsa(私钥)和 id_rsa.pub(公钥),说明已有密钥,可直接跳到「上传公钥」步骤;
  • 若没有,则继续生成新密钥。
步骤 3:生成 SSH 密钥对(关键步骤)

输入以下命令,替换为你的 GitHub 绑定邮箱(用于标识密钥):

bash

复制代码
# 使用更安全的 Ed25519 算法
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或者使用 RSA(如果系统较旧)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 🔖ssh-keygen命令语法:
    • 常用选项说明:
      *

      选项 说明
      -t type 指定密钥类型(如 ed25519, rsa, ecdsa
      -b bits 指定密钥长度(位数)
      -C comment 添加注释,通常用邮箱标识密钥所有者
      -f filename 指定密钥文件保存路径和名称
      -p 更改私钥的密码(不更改私钥本身)
      -y 从私钥生成对应的公钥
      -q 静默模式,不显示提示信息
    • 密钥类型比较

      类型 命令示例 安全性 性能 兼容性 推荐场景
      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" ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ 老旧系统兼容

执行后会出现三次交互,全部按回车默认即可(无需手动输入):

  1. 「Enter file in which to save the key」:密钥保存路径(默认 ~/.ssh/id_rsa,无需修改);
  2. 「Enter passphrase」:密钥密码(可选,设置后每次使用需输密码,更安全;初学者可直接回车跳过,免输密码);
  3. 「Enter same passphrase again」:重复密码(跳过则直接回车)。

git bash 执行参考界面:

步骤 4:确认密钥生成成功

再次执行「检查密钥」命令

若能看到下面两个文件,说明生成成功:

文件 内容 用途 分享安全性
id_ed25519 私钥 保存在本地,绝对保密 🚫 绝不分享
id_ed25519.pub 公钥 上传到 GitHub/服务器 可以安全分享

🔖提示:ssh-keygen更多命令见附录


4.2 上传公钥到 GitHub(网页端操作)

步骤 1:复制公钥内容(本地终端执行)

🔑方式一:直接查看公钥文件,拷贝密钥

在C:\Users\当前用户\.ssh下面,用文本编辑器打开公钥文件,拷贝以ssh 开头的整行字符串,备用

🔑方式二:使用命令查看:

  • Windows: bash

    复制代码
    cat ~/.ssh/yourfilename.pub  #换成你的公钥文件名
  • Mac/Linux: bash

    复制代码
    #换成你的公钥文件名
    pbcopy < ~/.ssh/yourfilename.pub  # 直接复制到剪贴板,无需手动选中

执行后,终端会输出一串以 ssh 开头、以你的邮箱结尾的整行 字符串(这就是公钥),完整复制这串字符 (包括开头的 ssh-rsa 和结尾的邮箱)。

  • git bash执行界面参考:
步骤 2:在 GitHub 中添加公钥
  1. 登录 GitHub 网页端,点击右上角「头像」→「Settings」;
  2. 左侧菜单栏找到「SSH and GPG keys」(SSH 和 GPG 密钥)→ 点击进入;
  3. 点击右上角「New SSH key」(新建 SSH 密钥);
  4. 填写密钥信息:
    • 「Title」(标题):自定义名称,方便区分(例如:「我的笔记本电脑」「公司电脑」);
    • 「Key type」(密钥类型):默认「Authentication key」(认证密钥);
    • 「Key」(密钥内容):粘贴刚才复制的公钥字符串(确保没有多余空格或换行);
  5. 点击「Add SSH key」(添加 SSH 密钥),若弹出密码验证(输入 GitHub 登录密码),验证后即可添加成功。

4.3 使用 SSH 密钥操作仓库(实际场景)

步骤 1:终端执行测试命令

bash

复制代码
ssh -T git@github.com

这是 GitHub 官方提供的测试命令,用于验证本地 SSH 能否与 GitHub 服务器正常通信。

git bash执行界面参考:

✍️提示:

  • 也许首次执行会弹出「是否继续连接」的提示(类似:The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established...);

  • 直接输入 yes 并回车(无需输入其他内容)。

  • 若终端输出以下内容,说明配置成功:

    • Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.
  • 若提示「Permission denied」(权限拒绝),检查公钥是否复制完整、GitHub 中添加的公钥是否正确。

🤔💡可能出现的错误:

检查:

一看解析不对,关闭了Watt Toolki,结果就正常了。

场景:用 git clone 克隆仓库(SSH 地址)
  1. 打开 GitHub 目标仓库页面,点击「Code」按钮,切换到「SSH」标签,复制 SSH 地址(格式:git@github.com:用户名/仓库名.git);

  2. 终端执行克隆命令: bash

    复制代码
    git clone git@github.com:你的用户名/你的仓库名.git
  3. 无需输入用户名 / 密码,直接克隆成功!后续执行 git push「git pull」也无需验证,自动通过 SSH 密钥授权。

git bash 执行界面参考:

4. 注意事项(避免踩坑)

  • fu'l私钥(id_rsa)是核心凭证,绝对不要分享给他人、不要上传到代码仓库(泄露会导致账户被恶意操作);
  • 一台电脑只需生成一对 SSH 密钥,可用于连接多个 GitHub 仓库(无需重复生成);
  • 若更换电脑 / 重装系统,需重新生成密钥对并上传新公钥到 GitHub;
  • 若 SSH 连接失败,可执行 ssh -vT git@github.com(加 -v 查看详细日志),排查公钥配置或网络问题。

附录

🔑ssh-keygen密钥管理

bash

复制代码
# 更改密钥密码
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故障排除

1. 检查密钥信息

bash

复制代码
# 检查密钥指纹
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

2. 测试连接

bash

复制代码
# 测试 SSH 连接到 GitHub
ssh -T git@github.com

# 使用特定密钥测试
ssh -T -i ~/.ssh/github git@github.com

# 详细模式查看连接过程
ssh -T -v git@github.com

3. 常见错误解决

bash

复制代码
# 错误: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/

相关推荐
5***a9753 小时前
Git爬虫
git·爬虫
逛逛GitHub3 小时前
推荐 3 个 AI 智能体 GitHub 项目,太绝了啊。
github
Empty_7774 小时前
Ansible变量
服务器·github·ansible
p***c9495 小时前
GitLab CI/CD变量
git·ci/cd·gitlab
CoderJia程序员甲12 小时前
GitHub 热榜项目 - 日榜(2025-11-15)
ai·开源·大模型·github·ai教程
Wiktok14 小时前
Git 提交规范网页说明
git
rainboy18 小时前
Flutter :自己动手,封装一个小巧精致的气泡弹窗库
前端·flutter·github
Ace_317508877619 小时前
拼多多商品详情接口深度解析:从加密参数破解到数据全量获取
前端·数据库·github
CLTHREE21 小时前
GitHub项目协作完整指南:从Fork到本地开发
github