蓝易云:Git多账号管理通过ssh公钥的方式
用 SSH 公钥做 Git 多账号管理,核心思路就一句话:“同一个域名下,用不同的 Host 别名绑定不同私钥”,让 SSH 在连接时自动选对身份。这样既不串号,也不需要频繁切换登录状态,工程上最稳。🙂
1)准备两套(或多套)独立密钥:一账号一把钥匙 🔐

建议优先用 ed25519(更短更安全、性能更好):
# 账号A(例如:工作)
ssh-keygen -t ed25519 -C "work" -f ~/.ssh/id_ed25519_work
# 账号B(例如:个人)
ssh-keygen -t ed25519 -C "personal" -f ~/.ssh/id_ed25519_personal
生成后你会得到:
- 私钥:
~/.ssh/id_ed25519_work(严禁外泄) - 公钥:
~/.ssh/id_ed25519_work.pub(提交到代码托管平台)
公钥需要分别添加到对应平台的“SSH Keys”里;一把公钥对应一个账号身份。
2)让 SSH 自动选钥:配置 ~/.ssh/config(关键动作)✅
在 ~/.ssh/config 写两段 Host 别名,把“域名 + 私钥”固定绑定:
# 工作账号
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# 个人账号
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
为什么要 IdentitiesOnly yes?
它会强制只用你指定的私钥,避免系统把一堆钥匙都试一遍,触发“认证失败/尝试次数过多”的典型坑。😄
3)把私钥加载进 ssh-agent(避免每次输密码)🚀
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal
4)克隆与远程地址:用 Host 别名区分账号(最容易用对)
以后你不要再用 git@github.com:...,而是用别名:
# 用工作身份克隆
git clone git@github-work:org/repo.git
# 用个人身份克隆
git clone git@github-personal:username/repo.git
如果仓库已经存在,直接改远程地址即可:
git remote set-url origin git@github-work:org/repo.git
5)提交人信息也要隔离:按仓库设置 user.name / user.email 🧾
SSH 只决定“你是谁在连仓库”,而提交记录里显示的作者信息由 Git 配置决定。建议按项目目录设置:
git config user.name "WorkName"
git config user.email "work@example.com"
这样工作仓与个人仓的提交归属不会混。
6)一眼确认有没有选对钥:测试命令
ssh -T git@github-work
ssh -T git@github-personal
若仍不确定,用更强的定位方式(看实际使用了哪把钥):
ssh -vT git@github-work
快速对照表(方便团队规范化落地)📌
| 场景 | Host 别名 | 私钥文件 | 远程地址写法 |
|---|---|---|---|
| 工作账号 | github-work | id_ed25519_work | git@github-work:org/repo.git |
| 个人账号 | github-personal | id_ed25519_personal | git@github-personal:user/repo.git |
常见故障一句话定位(不绕弯)
Permission denied (publickey):平台没添加对应公钥,或远程地址没用别名导致选错钥。- “尝试次数过多/认证失败”:
~/.ssh/config缺IdentitiesOnly yes,或 agent 里加载太多钥。 - 改了 config 不生效:确认文件权限(
~/.ssh与私钥不应过宽),并用ssh -vT看实际命中配置。
把这套方案落地后,你的多账号管理会变成“写对一次,长期稳定”,对个人电脑和团队协作都非常友好。