绝大多数开发会同时拥有个人、工作两套 GitHub/Gitee 账号,切换仓库推送时频繁踩坑:

  1. HTTPS 推送直接 403,无密码弹窗,报错Permission to xxx denied to xxx
  2. SSH 配置完成后 Git Bash 克隆正常,TortoiseGit 图形工具提示Host does not exist
  3. ssh 连接提示No supported authentication methods available(server sent:publickey)
  4. 测试 ssh 连通时错误拼接仓库路径,报域名解析失败;
  5. ssh/config 别名重复、Host 写真实域名导致账号互相覆盖串号;
  6. 误以为 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.comgitee.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 制完整单行文本配置到平台:

  1. GitHub:头像→Settings→SSH and GPG keys→New SSH key,粘贴保存;
  2. 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

核心配置参数解释

  1. IdentitiesOnly yes:强制仅使用当前 Host 绑定私钥,禁止 SSH 自动遍历所有密钥,杜绝串号 403;
  2. AddKeysToAgent yes:私钥自动加入 ssh-agent,减少重复输入密钥密码;
  3. Mac 用户可追加UseKeychain yes,密钥持久存入系统钥匙串;
  4. 全程无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。

永久修复方案(推荐,一劳永逸)

  1. 桌面空白处右键 → TortoiseGit → Settings(设置)
  2. 左侧菜单栏选择 Network(网络)
  3. 找到 SSH client 选项,替换默认 plink 程序,改为 Git 自带 ssh.exe
    标准路径参考(根据自身 Git 安装目录调整)
C:\Program Files\Git\usr\bin\ssh.exe
  1. 点击应用、确定保存,关闭所有 TortoiseGit 窗口重新打开。

修复原理

替换为 Git 原生 ssh.exe 后,图形工具与 Git Bash 共用同一套 ssh/config 配置,自定义别名全部正常识别,克隆、推送不再报主机不存在。