← 返回博客列表技术栈

GitHub 推送鉴权指南:SSH 与 Token 两种方式

GitHub 从 2021 年起不再支持用账号密码推送代码。执行 git push 时若出现 Invalid username or tokenPermission denied (publickey),需要改用 SSH 公钥Personal Access Token(PAT) 之一。

为什么会失败

报错常见原因
Invalid username or token. Password authentication is not supported远程地址是 HTTPS,却在 Password 处填了 GitHub 登录密码
Permission denied (publickey)远程地址是 SSH,但公钥未添加到 GitHub 账号

查看当前远程地址:

git remote -v
  • https://github.com/用户名/仓库.git → 需用 Token
  • git@github.com:用户名/仓库.git → 需用 SSH 公钥

方案 A:SSH 推送(推荐)

配置一次后无需反复输入密码,适合日常开发。

1. 检查本机是否已有密钥

ls ~/.ssh/id_ed25519.pub

若文件不存在,生成新密钥:

ssh-keygen -t ed25519 -C "你的邮箱"
# 一路回车即可使用默认路径和空密码

2. 复制公钥

cat ~/.ssh/id_ed25519.pub

输出类似:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... 15991304821@163.com

3. 添加到 GitHub

  1. 打开 GitHub SSH Keys 设置页
  2. 点击 New SSH key
  3. Title 填设备名(如 simple-CREFG-XX
  4. Key 粘贴整行公钥
  5. 保存

4. 切换远程地址并测试

cd ~/codes/simple_projects/MySpace

# 改用 SSH 地址
git remote set-url origin git@github.com:NEXTsimp/MySpace.git

# 测试连接(成功会提示 Hi NEXTsimp! ...)
ssh -T git@github.com

若提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED,说明本机 known_hosts 里 GitHub 的旧指纹过期,执行:

ssh-keygen -f ~/.ssh/known_hosts -R "github.com"
ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts
ssh -T git@github.com

5. 推送

git push origin master

方案 B:HTTPS + Token

不想配置 SSH 时可用此方案。Token 相当于「专用密码」,不能填 GitHub 登录密码

1. 生成 Personal Access Token

  1. 打开 GitHub Tokens 设置页
  2. Generate new token (classic)
  3. 勾选 repo 权限(推送私有/公开仓库都需要)
  4. 生成后立即复制 Token(页面关闭后不再显示)

2. 推送时用 Token 当密码

git push origin master
  • Username:GitHub 用户名(如 NEXTsimp
  • Password:粘贴 Token(不是登录密码)

3. 可选:让 Git 记住凭据

git config --global credential.helper store

下次输入一次 Token 后会保存到 ~/.git-credentials,不必每次粘贴。

两种方案对比

SSHHTTPS + Token
配置难度需生成密钥并上传到 GitHub需生成 Token
日常使用免输入,一劳永逸首次或过期时需输入
安全性私钥留在本机Token 可设过期时间和权限范围
推荐场景长期开发、多台设备临时推送、CI 脚本

常见问题

问题解决
SSH 测试仍 Permission denied确认公钥已添加到当前登录的 GitHub 账号,且复制的是 .pub 公钥而非私钥
HTTPS 填 Token 仍失败确认 Token 未过期,且勾选了 repo 权限
推送成功但 Vercel 未更新确认推送到正确分支(如 master),在 Vercel Deployments 查看构建状态
想切换回 HTTPSgit remote set-url origin https://github.com/NEXTsimp/MySpace.git

小结

  • GitHub 不支持用登录密码推送
  • SSHgit@github.com:用户/仓库.git + 本机公钥绑定 GitHub
  • HTTPShttps://github.com/用户/仓库.git + Token 当密码

本博客部署在 Vercel,每次 git push origin master 成功后会自动重新构建发布。