需为Mac配置三组独立ed25519 SSH密钥并设置~/.ssh/config分流:分别对应个人GitHub、公司GitHub和GitLab,每组密钥用不同文件名和邮箱注释,通过Host别名实现自动匹配,再用ssh-add加载并ssh -T验证连通性。

一台Mac要同时向个人GitHub、公司GitHub和GitLab推送代码,必须让每个仓库自动走对应的SSH密钥,否则git push时会因身份不匹配被拒绝或推错账号。
生成三组独立的SSH密钥
每组密钥必须用不同文件名、不同邮箱注释,不能共用id_rsa。密钥类型优先选ed25519(更安全、更短),别用已废弃的rsa1。
执行以下三条命令,分别生成个人GitHub、公司GitHub、GitLab密钥:
ssh-keygen -t ed25519 -C "me@personal.com" -f ~/.ssh/id_ed25519_github_personal
ssh-keygen -t ed25519 -C "you@company.com" -f ~/.ssh/id_ed25519_github_company
ssh-keygen -t ed25519 -C "you@company.com" -f ~/.ssh/id_ed25519_gitlab
生成后,【务必确认三个私钥文件都真实存在于~/.ssh/目录下】,漏一个会导致对应平台克隆失败。
把公钥内容粘贴到对应平台
用cat命令查看公钥内容并复制:
cat ~/.ssh/id_ed25519_github_personal.pub
cat ~/.ssh/id_ed25519_github_company.pub
cat ~/.ssh/id_ed25519_gitlab.pub
打开对应平台设置页:GitHub个人账号→Settings → SSH and GPG keys → New SSH key;公司GitHub同理;GitLab→Preferences → SSH Keys。每处只粘贴对应的一组公钥,标题可写“Mac-book-pro-personal”这类能区分来源的名称。
配置~/.ssh/config实现自动分流
创建或编辑~/.ssh/config文件,内容严格按以下格式书写,Host别名不能重复,HostName必须与你实际克隆地址里的域名完全一致(比如公司GitHub可能是github.company.com而非github.com):
# 个人GitHub
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github_personal
# 公司GitHub
Host github.com-company
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github_company
# GitLab
Host gitlab.company.com
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_ed25519_gitlab
注意:Host行只是本地别名,克隆时必须用它,比如git clone git@github.com-personal:me/repo.git;如果误写成git@github.com,SSH根本不会加载id_ed25519_github_personal。
启动ssh-agent并加载全部密钥
第一步:确保ssh-agent在后台运行
eval "$(ssh-agent -s)"
第二步:逐个加载私钥(需要输入各密钥的密码,若当时生成没设密码则跳过)
ssh-add ~/.ssh/id_ed25519_github_personal
ssh-add ~/.ssh/id_ed25519_github_company
ssh-add ~/.ssh/id_ed25519_gitlab
第三步:验证是否全部加载成功
ssh-add -l
输出应显示三行,每行末尾带对应密钥文件名。如果只看到一行或报错“not found”,说明某步漏了。
测试连通性并克隆验证
方法一:用ssh -T测试各Host别名是否能正确路由
ssh -T git@github.com-personal
ssh -T git@github.com-company
ssh -T git@gitlab.company.com
每次成功返回“Hi xxx! You've successfully authenticated…”即表示该链路通了。
方法二:实际克隆一个新仓库验证提交身份
git clone git@github.com-personal:me/test-repo.git → 进入目录 → git config --local user.name && git config --local user.email → 确保为空或已手动设为个人邮箱;若仍为全局值,立刻执行git config --local user.name "Me" && git config --local user.email "me@personal.com"











