Github两种鉴权模式PAT与SSH
文章目录
- Github两种鉴权模式PAT与SSH
-
- [1. PAT鉴权](#1. PAT鉴权)
- [2. SSH鉴权](#2. SSH鉴权)
- 3.两种鉴权的切换
1. PAT鉴权
通过 HTTPS 协议克隆和推送代码,使用用户名/密码或个人访问令牌(PAT)鉴权,所以PAT是与HTTPS协议相关的。该鉴权方法早期支持直接输入用户名和密码,但自 2021 年起,GitHub 要求改用 Personal Access Token(PAT) 替代密码。
一个使用示例:
bash
git clone https://github.com/username/repo.git
git push origin main # 会提示输入用户名和 PAT
当我们需要使用到PAT的时候,生成步骤如下:
首先进入Github
中的Settings
,然后进入Developer settings
,选择Token(classic)
,然后选择Generate new token
,生成的具体页面如下
然后在页面最底层选择生成,然后复制你的Token,切记这个Token只能复制一次,如果忘了就得重新生成,然后我们就可以在推送的时候使用这个PAT
密钥了,但每次推送的时候都需要输入一遍密钥非常不友好,可以使用下列的命令将密钥存储起来
bash
git config --global credential.helper cache
2. SSH鉴权
SSH是通过非对称加密(公钥/私钥对)验证身份,无需每次输入密码。适用于频繁与仓库交互(如开发者日常推送)。需要更高安全性的场景(密钥比密码更难破解)。
具体使用如下
1.检查是否已有 SSH 密钥
首先查看是否已经存在密钥
bash
ls -al ~/.ssh

其中带.pub
的是公钥,其余的是密钥,如果看到了诸如id_ed25519
或者id_rsa
之类的文件,说明已经存在密钥,这些文件名不同代表其使用了不同的加密算法。
2.生成新的 SSH 密钥
如果没有密钥则使用下列方法进行生成
bash
ssh-keygen -t ed25519 -C "[email protected]"
# 指定使用ed25519加密算法
# 或者指定使用rsa算法,密钥长度为4096个字符
ssh-keygen -t rsa -b 4096 -C "[email protected]"
3.将 SSH 密钥添加到 ssh-agent
启用ssh-agent
bash
eval "$(ssh-agent -s)" # 确保 ssh-agent 运行
将密钥添加到ssh-agent中
bash
ssh-add ~/.ssh/id_ed25519
运行以下命令复制公钥,或者也可以手动打开复制
bash
cat ~/.ssh/id_ed25519.pub | clip
4.将公钥添加到Github
登录 GitHub
→ 点击右上角头像
→ Settings
→ SSH and GPG keys
。
点击 New SSH key
:
Title
:填写标识(如 My Windows PC)。
Key type
:保持默认 Authentication Key
。
Key
:粘贴剪贴板中的公钥内容(以 ssh-ed25519
或 ssh-rsa
开头)。
点击 Add SSH key
5.测试SSH连接
输入
bash
ssh -T [email protected]
如果看到这样的回复,则连接成功
bash
$ Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.
3.两种鉴权的切换
如果你一开始使用的是https
配置仓库即使用了PAT
令牌,想切换到ssh
鉴权,那么可以先使用如下命令查看仓库使用的是哪种配置
bash
git remote -v
可以看到我一开使用的是https
bash
sjh sjhR9000X ~/Documents/Markdown_Note master git remote -v
origin https://github.com/shenmuxin/Markdown_Note.git (fetch)
origin https://github.com/shenmuxin/Markdown_Note.git (push)
我可以使用如下命令来切换到ssh
鉴权
bash
git remote set-url origin <你的ssh url>
可以看到我切换成功了
bash
sjh sjhR9000X ~/Documents/Markdown_Note master git remote -v
origin [email protected]:shenmuxin/Markdown_Note.git (fetch)
origin [email protected]:shenmuxin/Markdown_Note.git (push)