必须为GitHub和Gitee分别生成独立SSH密钥(GitHub用Ed25519,Gitee用RSA 4096),并配置~/.ssh/config实现自动路由,再将对应公钥添加至各平台账户设置中,才能真正免密推送。

要在Windows上免密推送代码到GitHub或Gitee,必须先生成SSH密钥对,并把公钥分别添加到两个平台的账户设置中,否则每次git push都要输密码或Token。
检查本地是否已有SSH密钥
打开Git Bash(不是CMD或PowerShell),输入:
ls -al ~/.ssh
如果看到id_rsa.pub或id_ed25519.pub这类文件,说明已有密钥;若提示“No such file or directory”,则需要新建。
【注意:已有密钥不等于能通用。GitHub和Gitee共用同一对密钥虽可行,但一旦某平台账号异常或需解绑,会连带影响另一个——推荐为不同平台生成独立密钥】
为GitHub单独生成Ed25519密钥
这一步优先使用更安全、更快的Ed25519算法,适用于2021年后的OpenSSH 8.8+(Git for Windows 2.34.0及以上自带)。
在Git Bash中执行:
ssh-keygen -t ed25519 -C "your_github_email@example.com" -f ~/.ssh/id_ed25519_github
按回车跳过保存路径确认→输入密码短语(可空,但建议设一个)→再按回车确认。完成后,私钥存为id_ed25519_github,公钥为id_ed25519_github.pub。
复制公钥内容:
cat ~/.ssh/id_ed25519_github.pub | clip
为Gitee单独生成RSA密钥
Gitee部分旧版企业实例对Ed25519支持不稳定,为兼容起见,这里改用RSA 4096位密钥。
继续在Git Bash中运行:
ssh-keygen -t rsa -b 4096 -C "your_gitee_email@example.com" -f ~/.ssh/id_rsa_gitee
同样一路回车,默认路径+空密码(或自设)。生成后公钥文件是id_rsa_gitee.pub。
复制它:
cat ~/.ssh/id_rsa_gitee.pub | clip
在GitHub上添加SSH公钥
第一步:登录GitHub → 右上角头像 → Settings → 左侧菜单点「SSH and GPG keys」→ 右上角「New SSH key」
第二步:Title栏填“Work Laptop - GitHub”,Key type选“Authentication Key”,Key框内粘贴刚才复制的id_ed25519_github.pub全部内容
第三步:滚动到底部,点击「Add SSH key」→ 输入GitHub密码二次验证 → 成功提示出现
在Gitee上添加SSH公钥
方法一(网页端):
登录Gitee → 右上角头像 → 「设置」→ 左侧「SSH公钥」→ 「添加SSH公钥」→ Title写“Work Laptop - Gitee”,Key粘贴id_rsa_gitee.pub全文 → 点击「确定」
方法二(命令行快速验证):
在Git Bash中执行 ssh -T git@gitee.com,首次连接会提示确认host指纹,输入yes回车;若返回“You've successfully authenticated”,说明公钥已生效。
配置SSH客户端自动路由
现在有两个密钥,但Git默认只认~/.ssh/id_rsa。必须告诉SSH:访问github.com时用哪个私钥,访问gitee.com时用哪个。
用记事本新建文件:
C:\Users\你的用户名\.ssh\config
写入以下内容(注意缩进用空格,不能用Tab;Host名大小写敏感):
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_gitee
【关键:config文件不能有扩展名(如.config或.txt),且权限必须为仅当前用户可读。若后续报错“Bad permissions”,在Git Bash中执行 chmod 600 ~/.ssh/config】
测试两个平台的SSH连接
依次运行两行命令:
ssh -T git@github.com
ssh -T git@gitee.com
第一次运行任一命令时,终端会显示一段host fingerprint警告,输入yes并回车即可;之后若分别返回类似“Hi xxx! You've successfully authenticated”和“You've successfully authenticated, but Gitee does not provide shell access”,就表示双平台SSH均已打通。











