1. 为什么你的GitHub突然报403错误?
最近在Windows上提交代码到GitHub时,突然遇到这样的错误提示:"remote: Support for password authentication was removed..." 然后就是一串403错误代码。这个场景我太熟悉了,去年8月之后几乎所有开发者都会遇到这个问题。
简单来说,GitHub在2021年8月13日彻底移除了密码验证方式。这不是bug,而是GitHub为了安全考虑做的重大调整。想象一下,就像你家门锁从老式钥匙升级成了指纹锁,虽然更安全了,但需要重新配置一下。
我刚开始遇到这个问题时也很懵,试了几种方法后发现最靠谱的解决方案就是配置SSH密钥。这就像给你的GitHub账户配一把专属的数字钥匙,不仅安全,而且一劳永逸。下面我会手把手带你走完整个流程,包括那些容易踩坑的地方。
2. 准备工作:配置Git基础信息
2.1 设置全局用户名和邮箱
在生成SSH密钥之前,我们需要先告诉Git你是谁。打开Git Bash(没有的话需要先安装Git for Windows),输入以下两条命令:
git config --global user.name "你的GitHub用户名" git config --global user.email "你的GitHub注册邮箱"这里有个小技巧:如果你经常在不同项目使用不同身份,可以去掉--global参数,只在特定项目目录下设置。我就曾经因为用错邮箱导致提交记录没被统计到个人主页,排查了好久才发现问题。
2.2 检查现有配置
设置完成后,可以用这个命令查看当前配置:
git config --global --list如果看到类似这样的输出就说明配置成功了:
user.name=YourName user.email=your.email@example.com3. 生成SSH密钥对
3.1 密钥生成命令详解
现在来到关键步骤,输入这个命令生成SSH密钥:
ssh-keygen -t ed25519 -C "你的邮箱"这里有几个需要注意的点:
- 我推荐使用
ed25519算法而不是传统的RSA,因为更安全且密钥更短 -C后面的注释一般用邮箱,但实际可以是任意文本- 执行后会让你选择保存位置,直接回车用默认路径就行
3.2 关于密码的设置
系统会问你是否设置密码(passphrase),我的建议是:
- 个人电脑:可以直接回车留空,方便日常使用
- 公用电脑:建议设置密码,增加安全性
我自己的经验是,如果设置了密码,每次使用密钥都需要输入,虽然安全但确实有点麻烦。折中方案是用ssh-agent管理密码,后面会讲到。
3.3 密钥文件说明
成功后会生成两个文件:
id_ed25519:私钥,相当于你的家门钥匙,绝对不能外泄id_ed25519.pub:公钥,可以理解为门锁,需要上传到GitHub
文件默认存放在C:\Users\你的用户名\.ssh目录下。如果找不到,可能是隐藏了文件夹,需要在资源管理器设置显示隐藏项目。
4. 管理SSH密钥代理
4.1 启动ssh-agent
ssh-agent就像个钥匙串管理器,可以帮你记住密码。在Git Bash中运行:
eval $(ssh-agent -s)如果看到类似Agent pid 12345的输出,说明启动成功。这里有个坑:有些Windows版本可能需要先手动启动服务,如果报错可以尝试:
exec ssh-agent bash4.2 添加私钥到代理
接着把私钥交给agent管理:
ssh-add ~/.ssh/id_ed25519如果你之前设置了密码,这时会提示输入。成功后可以用ssh-add -l查看已添加的密钥。
我遇到过ssh-agent突然不工作的情况,这时候需要先ssh-add -D删除所有密钥,再重新添加。Windows系统下这个问题比较常见。
5. 将公钥添加到GitHub账户
5.1 复制公钥内容
在Git Bash中运行这个命令复制公钥:
clip < ~/.ssh/id_ed25519.pub如果clip命令不工作(特别是WSL环境下),可以直接用记事本打开.pub文件全选复制。注意要复制完整内容,包括开头的ssh-ed25519和结尾的邮箱。
5.2 GitHub后台配置
- 登录GitHub,点击右上角头像 > Settings
- 左侧选择"SSH and GPG keys"
- 点击"New SSH key"
- Title可以取个有意义的名称,比如"我的工作电脑"
- 在Key区域粘贴刚才复制的公钥内容
- 点击"Add SSH key"完成
这里容易犯的错误是:
- 复制时多出空格或换行
- 使用了错误的公钥文件内容
- 忘记点击最后的确认按钮
6. 测试连接与问题排查
6.1 基础连接测试
运行测试命令:
ssh -T git@github.com第一次连接会询问是否继续,输入yes回车。如果看到带你用户名的欢迎信息,比如:
Hi username! You've successfully authenticated...说明配置成功了。
6.2 常见问题解决方案
问题1:端口被屏蔽有些网络环境会屏蔽默认的22端口,可以改用443端口。编辑~/.ssh/config文件(没有就新建):
Host github.com Hostname ssh.github.com Port 443问题2:多账号冲突如果你有多个GitHub账号,需要为每个账号创建独立的密钥对,并在config文件中配置:
# 主账号 Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519_main # 工作账号 Host github-work HostName github.com IdentityFile ~/.ssh/id_ed25519_work使用时记得修改仓库remote地址中的域名部分,比如:
git remote set-url origin git@github-work:username/repo.git问题3:代理冲突如果你开了网络代理,可能会导致SSH连接失败。可以尝试临时关闭代理,或者在config中添加:
Host github.com ProxyCommand none7. 将现有项目切换为SSH协议
7.1 修改远程仓库地址
对于已经存在的项目,需要把HTTPS地址改为SSH。先查看当前remote:
git remote -v然后修改(假设remote叫origin):
git remote set-url origin git@github.com:username/repo.git7.2 验证切换结果
再次查看remote确认地址已变更:
git remote -v应该看到类似这样的输出:
origin git@github.com:username/repo.git (fetch) origin git@github.com:username/repo.git (push)现在尝试推送一个更改,如果不再出现403错误,说明全部配置成功了。我在团队内部推行这套方案后,新同事的GitHub配置问题减少了90%以上。