使用github ssh key,解决作为他人github私有仓库的collaborator,无法使用git远程连接问题
GitHub Git Fetch 认证失败:从 HTTPS 403 到 SSH 配置
最近在 WSL 中使用 GitHub 仓库时,执行:
git fetch
遇到了 GitHub 认证失败的问题。本文简单记录问题原因以及最终使用 SSH 解决的过程。
1. 问题现象
仓库的远程地址最初使用 HTTPS:
git remote -v
类似:
origin https://github.com/xxx/db.git (fetch)
origin https://github.com/xxx/db.git (push)
执行:
git fetch
Git 提示输入 GitHub 用户名和密码:
Username for 'https://github.com':
Password for 'https://username@github.com':
即使输入正确的 GitHub 账号密码,依然出现:
remote: Invalid username or token.
Password authentication is not supported for Git operations.
fatal: Authentication failed
2. 问题原因
问题并不是 GitHub 账号或密码输入错误,而是 GitHub 已经不再支持通过账号密码进行 Git 的 HTTPS 身份认证。
因此,虽然终端显示的是:
Password:
但这里实际上不能输入 GitHub 登录密码。
使用 HTTPS 操作 GitHub 仓库时,应使用 Personal Access Token(PAT) 等受支持的认证方式。
后来改用 PAT 后,又遇到了:
remote: Write access to repository not granted.
fatal: unable to access '...': The requested URL returned error: 403
此时账号本身已经是该仓库的 Collaborator,因此问题进一步定位到了 Token 的仓库访问范围或权限配置。
也就是说即使 GitHub 账号拥有仓库访问权限,也不意味着创建的 PAT 自动拥有相同权限。
为了避免继续处理 HTTPS Token 权限问题,最终选择将 GitHub 认证方式改为 SSH。
3. 配置 SSH Key
首先在 WSL 中生成 SSH Key:
ssh-keygen -t ed25519 -C "你的GitHub邮箱"
按照提示完成生成后,可以查看公钥:
cat ~/.ssh/id_ed25519.pub
复制输出的整行内容。
随后进入 GitHub:
Settings
→ SSH and GPG keys
→ New SSH key
将公钥添加到 GitHub 账号。
4. 测试 SSH 连接
执行:
ssh -T git@github.com
第一次连接可能出现:
The authenticity of host 'github.com' can't be established.
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 身份认证已经成功。
5. 修改仓库远程地址
原来的仓库使用 HTTPS:
https://github.com/xxx/db.git
将其修改为 SSH:
git remote set-url origin git@github.com:xxx/xxx.git
检查:
git remote -v
此时应该看到:
origin git@github.com:xxx/xxx.git (fetch)
origin git@github.com:xxx/xxx.git (push)
再次执行:
git fetch
即可正常从 GitHub 获取远程代码,不再需要输入用户名和 PAT。
6. 总结
这次问题的核心并不是 Git 或 WSL 本身,而是 GitHub 的身份认证方式。
最开始使用的是:
HTTPS + GitHub账号密码
但 GitHub 已经不支持这种认证方式。
改用 PAT 后,又因为 Token 的仓库访问范围或权限配置出现了 403。最终改成:
SSH + SSH Key
GitHub 可以通过 SSH Key 确认对应的 GitHub 账号,再根据该账号的 Collaborator 权限判断是否允许访问仓库。
对于经常在 WSL/Linux 环境下使用 GitHub 的情况,配置一次 SSH Key 后,后续执行 git fetch、git pull、git push 都更加方便。

浙公网安备 33010602011771号