绝大多数开发会同时拥有个人、工作两套 GitHub/Gitee 账号,切换仓库推送时频繁踩坑:
- HTTPS 推送直接 403,无密码弹窗,报错
Permission to xxx denied to xxx; - SSH 配置完成后 Git Bash 克隆正常,TortoiseGit 图形工具提示
Host does not exist; - ssh 连接提示
No supported authentication methods available(server sent:publickey); - 测试 ssh 连通时错误拼接仓库路径,报域名解析失败;
- ssh/config 别名重复、Host 写真实域名导致账号互相覆盖串号;
- 误以为 ssh-keygen -C 必须填写邮箱 / 账号,多账号共用一套密钥永久权限报错。
本文结合 Windows 真实踩坑案例,统一梳理底层原理、标准配置、全报错排查、TortoiseGit 专属修复,一套方案永久解决多账号冲突,OpenSSH 配置写法 2026 年仍为官方标准,Windows/Mac/Linux 全平台兼容。
我推送代码到 github时报错如下:
remote: Permission to xxxxxxx/StylePatch.git denied to nethuser.
fatal: unable to access 'https://github.com/xxxxxxx/StylePatch.git/': The requested URL returned error: 403
Pushing to https://github.com/xxxxxxx/StylePatch.git
git did not exit cleanly (exit code 128) (2422 ms @ 2026/7/3 15:45:29)
报错解读
仓库归属账号annmax1983,本地缓存登录身份xinsiyu2008,身份不匹配触发 403;exit code 128 是 Git 标准权限异常退出码,无登录弹窗是 Windows 凭据管理器缓存旧账号 Token 自动复用。
报错 2:SSH 公钥认证失败
No supported authentication methods available(server sent:publickey)
原因
ssh-agent 未加载对应私钥、config 私钥路径错误、公钥未粘贴到对应账号后台、缺少IdentitiesOnly yes强制密钥参数。
报错 3:Git Bash 正常,TortoiseGit 使用 ssh 别名提示 Host does not exist
Cloning into 'D:\Work_Code\github\StylePatch'...
Unable to open connection:
Host does not exist
fatal: Could not read from remote repository.
git did not exit cleanly (exit code 128)
核心根源
TortoiseGit 默认 ssh 客户端为TortoiseGitPlink.exe,该工具不读取系统~/.ssh/config自定义 Host 别名,仅替换为 Git 自带ssh.exe才能复用统一配置。
报错 4:ssh config 重复 Host 别名覆盖串号
同一 Host 同时绑定github.com、gitee.com,后定义配置覆盖前一段,访问其中一个平台直接使用错误密钥,永久 403。
以上就是我遇到的错误,下面我把两个账号的配置流程记录下来。
下面是我的配置过程,要仔细对照:目标,两个github账号,两个gitee账号,看我怎么配置。
步骤 1:每个账号独立生成专属密钥
ssh-keygen -t ed25519 -C "xintest" -f ~/.ssh/id_xintest_home
ssh-keygen -t ed25519 -C "annme" -f ~/.ssh/id_annme_home
注意xintest和annme 还有id_xintest_home和id_annme_home都是自定义的,和账号没有关系,方便自己区分的。这里我们产生两套key。
执行后连续两次回车跳过密钥密码;追求安全可设置解锁密码。
步骤 2:复制公钥上传对应账号后台
在C:\Users\(你的用户名)\.ssh文件夹下找到公钥 id_xintest_home.pub 和id_annme_home.pub 制完整单行文本配置到平台:
- GitHub:头像→Settings→SSH and GPG keys→New SSH key,粘贴保存;
- Gitee:个人设置→安全设置→SSH 公钥,粘贴保存。
步骤 3:无漏洞 ssh/config 完整模板
有了key, 我们需要配置config来区分两个账号,在如下路径新建txt文件,然后改名为config,记住不要后缀哈,
Windows:C:\Users\用户名\.ssh\config
Mac/Linux:~/.ssh/config
文件无后缀,缩进统一使用空格,禁用 Tab 制表符
# ========== GitHub 双账号 ==========
Host gh_xintest
HostName github.com
User git
IdentityFile ~/.ssh/id_xintest_home
IdentitiesOnly yes
AddKeysToAgent yes
Host gh_annme
HostName github.com
User git
IdentityFile ~/.ssh/id_annme_home
IdentitiesOnly yes
AddKeysToAgent yes
Host gitee_xintest
HostName gitee.com
User git
IdentityFile ~/.ssh/id_xintest_home
IdentitiesOnly yes
AddKeysToAgent yes
Host gitee_annme
HostName gitee.com
User git
IdentityFile ~/.ssh/id_annme_home
IdentitiesOnly yes
AddKeysToAgent yes
核心配置参数解释
IdentitiesOnly yes:强制仅使用当前 Host 绑定私钥,禁止 SSH 自动遍历所有密钥,杜绝串号 403;AddKeysToAgent yes:私钥自动加入 ssh-agent,减少重复输入密钥密码;- Mac 用户可追加
UseKeychain yes,密钥持久存入系统钥匙串; - 全程无
Host github.com / Host gitee.com写法,避免单账号覆盖全部配置。
以上配置完成后Git Bash下就会正常,使用方式如下:例如你要在平台上找ssh地址例如:我在gitee上的一个库:git@gitee.com:goodme/style-patch.git ,我来clone 一下,要用以下命令:
git clone git@gitee_annme:anntest/style-patch.git
这个命令就是以 gitee_annme 的身份来操作。还有一个很大坑在TortoiseGit上,如果直接clone就会失败,看下一节
五、TortoiseGit 图形工具专属修复(解决 Git Bash 正常、图形工具 Host 不存在)
故障根源
TortoiseGit 默认 SSH 客户端TortoiseGitPlink.exe不读取~/.ssh/config自定义 Host 别名,识别不到 gh_annmax/gitee_annmax,直接抛出 Host does not exist。
永久修复方案(推荐,一劳永逸)
- 桌面空白处右键 → TortoiseGit → Settings(设置)
- 左侧菜单栏选择 Network(网络)
- 找到 SSH client 选项,替换默认 plink 程序,改为 Git 自带 ssh.exe
标准路径参考(根据自身 Git 安装目录调整)
C:\Program Files\Git\usr\bin\ssh.exe
- 点击应用、确定保存,关闭所有 TortoiseGit 窗口重新打开。
修复原理
替换为 Git 原生 ssh.exe 后,图形工具与 Git Bash 共用同一套 ssh/config 配置,自定义别名全部正常识别,克隆、推送不再报主机不存在。