macOS多Git账号SSH密钥:重启失效、无法自动切换问题
macOS同设备双Git账号SSH自动加载+自动切换配置方案
现有配置存在三个核心错误,直接导致重启丢密钥、操作仓库串号问题:
- SSH全局配置段错误指定了多个身份密钥,且未开启强制身份匹配,SSH连接时会优先尝试排在前面的个人密钥
- 自定义Host的User字段填写错误,GitHub SSH连接统一使用
git作为连接用户,账号身份完全靠密钥识别,填自定义用户名会导致匹配异常 - 本地仓库远程地址未匹配自定义Host别名,连接时走默认GitHub域名,无法触发对应密钥的匹配规则
第一步:修正~/.ssh/config配置文件
将原有配置全部替换为以下内容:
# 全局基础配置 Host * UseKeychain yes AddKeysToAgent yes IdentitiesOnly yes # 个人GitHub账号 Host github-my HostName github.com User git IdentityFile ~/.ssh/my # 工作GitHub账号 Host github-work HostName github.com User git IdentityFile ~/.ssh/work
配置说明:
- 删除全局
Host *段下的固定IdentityFile配置,避免所有连接默认优先加载个人密钥 - 新增
IdentitiesOnly yes配置,强制SSH仅使用当前Host绑定的密钥发起连接,不会遍历尝试agent中加载的其他密钥,从根源解决串号问题 - 两个账号的Host别名做明确区分,统一将User设为
git,符合GitHub的SSH连接规则 - 该配置下macOS会自动读取钥匙串中存储的密钥,重启后无需手动执行
ssh-add,首次连接对应Host时会自动加载密钥
第二步:修改本地仓库的远程地址,匹配Host别名
原有仓库远程地址默认用git@github.com格式,无法匹配自定义的Host规则,会导致SSH走默认密钥认证,需要按仓库归属替换远程地址:
- 进入个人仓库目录,执行命令替换个人仓库远程地址:
git remote set-url origin git@github-my:<你的个人GitHub用户名>/<仓库名>.git
- 进入工作仓库目录(如
~/workcode下的业务仓库),执行命令替换工作仓库远程地址:
git remote set-url origin git@github-work:<公司GitHub组织名>/<工作仓库名>.git
以报错的work/Test.git仓库为例,替换后的远程地址应为git@github-work:work/Test.git,可执行git remote -v确认替换结果。
第三步:配置验证
- 先清空当前ssh-agent的缓存密钥,避免历史缓存影响测试结果:
ssh-add -D
- 测试个人账号连接:
ssh -T git@github-my
正常返回个人账号认证成功提示即配置正确,格式参考:Hi my! You've successfully authenticated, but GitHub does not provide shell access.
3. 测试工作账号连接:
ssh -T git@github-work
正常返回工作账号认证成功提示即配置正确。
4. 重启设备后直接进入对应仓库执行git pull/git push操作,无需手动加载密钥,也不会出现跨账号权限报错。
极端情况下如果仍存在重启后密钥不加载的问题,可将
ssh-add --apple-load-keychain命令存为shell脚本,添加到系统登录项中开机自动执行即可,按上述配置完成后一般不需要该操作。
内容的提问来源于stack exchange,提问作者chang356
相关产品推荐
相关产品推荐

