前言
我有两个Github账户,一个上传博客源文件,一个上传图片,但一把 Git SSH 公钥只能绑定到一个 GitHub 账户,无法绑定多个Github账户。可方法总比困难多,一台电脑可以通过多把密钥 + SSH config,同时管理多个 GitHub 账户,于是我们可以通过2个Git账户通过git config绑定2个Github账户,上传到A Github账户就用A密钥和Git账户A,上传到B Github账户就用B密钥和Git账户B。
这套方案本来是可行的,但我遇到了一个新的问题:我这台机器曾经有两个本地用户账户,都使用过 Git。即使后来删除了那个账户,但是.ssh 目录下的文件仍保留了它的访问权限,Git 检测到其他用户有访问权,就拒绝使用,导致 SSH 连接直接失败,于是我用了各种方法成功删除了它的权限。考虑到Git的使用范围很广,很多人应该都会遇到这个问题,我写下这篇文章帮大家避坑。
本文章假设你Github大号为A,小号为B且Git大号为C,小号为D,Git账户C绑定Github账户A,Git账户D绑定Github账户B。本教程有一些地方可自定义,有一定电脑基础的可自定义,小白请保持默认以成功。
一、查看SSH状态
打开 PowerShell,分别输入以下代码:
cd ~\.ssh
dir id_rsa*
你会看到类似输出:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2026/7/19 19:17 2610 id_rsa
-a---- 2026/7/19 19:17 574 id_rsa.pub
id_rsa / id_rsa.pub:这是默认密钥,你可能已经绑定到主GitHub 账号(账户A)。
以下命令可以检查已有密钥绑定的账号:
ssh -T git@github.com
成功会输出:Hi,xxx…! You’ve successfully authenticated…
如果不成功,可能是碰到了和我一样的问题——Windows SSH 文件权限问题,你需要着下面来解决。
当然,如果你根本没绑定Github大号(A),就在Powershell输入以下命令:
ssh-keygen -t rsa -b 4096 -C "你git账户C的邮箱,随便输一个你的邮箱" -f ~/.ssh/id_rsa
把密钥按照下图粘贴到Github大号(A)即可:

二、解决 Windows 文件权限问题
Windows 有时会给 .ssh 目录下的私钥或 config 文件附加多余用户的权限,导致 SSH 认为“其他人可以读取私钥”,从而拒绝使用。我就踩了这个坑,本以为删除用户即可,没想到还有历史遗留问题!所以我们需要修复私钥 id_rsa (上方的默认密钥)的权限问题。
用 icacls 查看当前权限:
icacls ~/.ssh/id_rsa
这里会看到用户名,但这里的用户名不等于你自己设置的用户名,比如我自己设定的是wjk20,而这里显示的是DESKTOP-08IJS0K\Wjk20:(F),一定要分清楚,为了方便,我们统一称呼为特殊用户名。如果输出结果有其它用户,我们需要移除它:
icacls ~/.ssh/id_rsa /remove "需要删除的其它特殊用户名"
再次用 icacls 查看当前权限:
icacls ~/.ssh/id_rsa
如果它还在,我们就需要用更彻底的方法来清除:
icacls ~/.ssh/id_rsa /reset
icacls ~/.ssh/id_rsa /inheritance:r
icacls ~/.ssh/id_rsa /grant:r "你自己的特殊用户名"
接着再次用 icacls 查看当前权限:
icacls ~/.ssh/id_rsa
三、生成账号B的SSH并绑定
假设你的第二个Github账号是 B,需要为它单独生成一对密钥,但文件名不能与默认的 id_rsa 重名,这里用的是id_rsa_2,你也可修改成id_rsa_xx的形式
ssh-keygen -t rsa -b 4096 -C "你的Git账户D的邮箱,不要和主账户(账户C)一样" -f ~/.ssh/id_rsa_2
完成后检查:
dir ~/.ssh/id_rsa_2*
你应该能看到 id_rsa_2 和 id_rsa_2.pub`,那么这一步就成功了,把这个ssh按照一样的步骤绑定到你的Github小号(B)。

四、创建 SSH 配置文件
SSH 配置文件 ~/.ssh/config 让 Git 知道连接不同 Host 别名时使用哪把密钥,实现上传到A Github账户就用A密钥和Git账户C,上传到B Github账户就用B密钥和Git账户D。
输入到powershell中,github-A 和 github-B你可改成你想要的名称,如果你前面自定义了id_rsa_2,这里也要修改过来:
@"
Host github-A
HostName github.com
User git
IdentityFile C:\Users\你的用户名\.ssh\id_rsa
Host github-B
HostName github.com
User git
IdentityFile C:\Users\你的用户名\.ssh\id_rsa_2
"@ | Out-File -FilePath ~/.ssh/config -Encoding ASCII -Force
修复新生成的 config 文件权限**:
icacls ~/.ssh/config /reset
icacls ~/.ssh/config /inheritance:r /grant:r "你的特殊用户名"
五、测试两个别名连接
测试 Git-C 别名,如果你前面修改了github-A,请自定义为你改的:
ssh -T git@github-A
测试 Git-D 别名,如果你前面修改了github-B,请自定义为你改的:
ssh -T git@github-B
成功会输出:Hi,xxx…! You’ve successfully authenticated…
结语
按本教程操作后,部分仓库的远程连接可能会断开,需要重新指定远程地址。例如我的配置
git remote set-url github git@github-B:hexvorking/img-avif.git
其中 github-B 对应你的小号别名,hexvorking 是 GitHub 用户名,img-avif 是仓库名,替换成你自己的即可。搁置了1个月之后一天发出2篇文章,是不是非常高产(笑)。本篇文章是我今天提交时遇到的真实情况,在于Deepseek老师深度探讨之后得出来的教程,希望能解决你的问题。如有其他报错请第一时间询问Deepseek老师,如还解决不了,可以发到评论区,我和其他大神给你看看。我建议提到能自定义的地方绝不自定义,因为跟着这篇教程走一定能成功,而要是小白自定义了未修改脚本可能会报错。这篇文章如果有误导性的错误,欢迎指出。


评论