免密码推送依赖ssh密钥验证而非跳过认证;执行git remote get-url origin可确认协议类型,https需改为git@gitee.com格式,并确保私钥权限600、完整复制公钥、正确加载密钥及配置ssh config以支持多账号。

免密码推送不是靠“跳过认证”实现的,而是把密码验证换成更安全、更自动的 SSH 密钥验证。只要远程 URL 是 git@gitee.com:xxx/xxx.git 格式,且本地私钥能被正确加载,git push 就不会弹密码框。
怎么确认当前仓库走的是 HTTPS 还是 SSH?
执行 git remote get-url origin,看输出:
- 如果是
https://gitee.com/xxx/xxx.git—— 走 HTTPS,每次 push 都会要密码或 token - 如果是
git@gitee.com:xxx/xxx.git—— 走 SSH,前提是密钥已配好且生效
别只看 GitHub/GitLab 的习惯写法,Gitee 同样支持 git@gitee.com。如果输出是 HTTPS,直接改地址:git remote set-url origin git@gitee.com:用户名/仓库名.git
生成 SSH 密钥时最常踩的三个坑
很多人卡在“测试通了但 push 还是报 Permission denied”,问题往往不在平台配置,而在本地密钥环节:
-
ssh-keygen -t ed25519 -C "your_email@example.com"执行后,看到Enter file in which to save the key时别乱填路径——直接回车用默认~/.ssh/id_ed25519;手填路径容易导致后续ssh-add找不到文件 - 私钥权限必须是
600(chmod 600 ~/.ssh/id_ed25519),Windows 上 Git Bash 默认建的目录权限有时不对,得手动修 - 公钥复制不完整:用
cat ~/.ssh/id_ed25519.pub看到的内容,必须从ssh-ed25519开头、到邮箱结尾,**整行复制**,前后不能有空格、换行、引号——粘贴进 Gitee 时多一个空格就认证失败
为什么 ssh -T git@gitee.com 成功,但 git push 仍失败?
这说明 SSH 连接层通了,但 Git 操作没走对密钥,常见原因:
- 没运行
ssh-add ~/.ssh/id_ed25519(尤其 Windows Git Bash 或 macOS 新终端里,ssh-agent不自动加载) - 运行了
ssh-add -l却没输出——代表密钥根本没载入,得先eval "$(ssh-agent -s)"启动 agent 再 add - Gitee 上添加的公钥内容和本地
id_ed25519.pub不一致(比如复制时截断、用了旧密钥、或平台缓存了旧记录) - 仓库 remote URL 里用户写错了,比如写成
git@github.com却粘贴到了 Gitee 公钥列表里
多账号共存时必须配 SSH Config
如果你同时用 Gitee 个人号 + 公司 GitLab,或者多个 Gitee 账号,只生成一个密钥会冲突——平台无法判断该用哪个私钥。这时必须靠 ~/.ssh/config 做路由:
例如给 Gitee 个人账号加一段:
Host gitee-personal HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes
然后把仓库 remote 改成:git remote set-url origin gitee-personal:用户名/仓库名.git
注意:Host 是你自定义的别名,HostName 才是真实域名;IdentityFile 必须指向对应账号的私钥路径;IdentitiesOnly yes 是关键,它禁止 SSH 尝试其他密钥,避免误用。
真正麻烦的不是生成密钥,而是让 Git 在对的时间、用对的密钥、连对的主机——~/.ssh/config 就是那个调度员,漏配或多配都会导致静默失败。











