遇到 Git 推送失败?切换 SSH 密钥免密访问
在操作 Git 时,如果看到类似 remote: Invalid username or token. Password authentication is not supported for Git operations 的报错,说明 GitHub 已不再支持通过账号密码进行 HTTPS 推送。这是出于安全考虑的策略调整,此时最稳妥的方案是切换到 SSH 密钥验证。
生成 SSH 密钥
首先需要在本地终端生成一对公私钥。推荐使用 ed25519 算法,相比传统的 RSA,它在安全性、密钥长度和速度上都有优势。
ssh-keygen -t ed25519 -C "[email protected]"
执行后按提示操作,默认路径下会生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。
将公钥添加到 GitHub
接下来需要把生成的公钥上传到 GitHub 账户中。
- 在终端查看并复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 登录 GitHub,进入 Settings > SSH and GPG keys > New SSH key。
- 粘贴刚才复制的内容,给密钥起个易记的名称,类型保持默认的
Authentication key即可。 - 点击 Add SSH key 保存。

修改远程仓库地址
现在本地仓库还指向 HTTPS 地址,需要将其改为 SSH 格式。
git remote set-url origin [email protected]:username/reponame.git
请将 username 和 reponame 替换为你自己的用户名和仓库名。这一步相当于告诉 Git 以后用 SSH 协议去连接服务器。
测试连接是否成功
配置完成后,先别急着提交,跑一下测试命令确认权限无误。
ssh -T [email protected]
如果看到如下提示,说明 SSH 配置正确:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
这里的 username 显示为你的 GitHub 用户名,出现这个界面意味着身份验证已通过。
首次推送与后续操作
最后尝试推送代码:
git push -u origin master
这次应该能直接成功,无需输入密码或 Token。其中 -u 参数等同于 --set-upstream,它将本地的 master 分支与远程的 关联起来。设置好之后,以后只需要写 或 即可,Git 会自动追踪对应的分支,省去了每次重复指定远程名的麻烦。


