同一台机器如何支持ssh免密多个github账户

一台机器同时给不同 GitHub 账号配不同 SSH 私钥,本质上是让 SSH 根据不同仓库地址自动选择不同 key

  • 核心思路是:
    每个账号一把 key + SSH config 里定义多个 Host 别名 + clone 时用别名而不是默认域名。

一、为不同账号生成不同 SSH key

公司账号

1
2
ssh-keygen -t ed25519 -C "work@example.com" \
-f ~/.ssh/id_ed25519_work

个人账号

1
2
ssh-keygen -t ed25519 -C "personal@example.com" \
-f ~/.ssh/id_ed25519_personal

最终得到:

1
2
3
4
5
~/.ssh/id_ed25519_work
~/.ssh/id_ed25519_work.pub

~/.ssh/id_ed25519_personal
~/.ssh/id_ed25519_personal.pub

把各自 .pub 公钥添加到对应 GitHub 账号即可。


二、配置 ~/.ssh/config(关键步骤)

编辑:

1
vim ~/.ssh/config

写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 工作账号
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

区分alias

github-work      -> 用工作 key
github-personal  -> 用个人 key

而实际仍然连接 github.com


三、clone 仓库时的区别

工作仓库

1
git clone git@github-work:company/repo.git

个人仓库

1
git clone git@github-personal:me/repo.git

关键就在这里:

git@github-work
git@github-personal

SSH 根据 Host 自动选 key


四、验证是否生效

测试连接:

1
2
ssh -T git@github-work
ssh -T git@github-personal

如果成功,会看到不同账号的欢迎信息。


五、老仓库如何切换账号?

改 remote 地址即可:

1
git remote set-url origin git@github-work:org/repo.git

1
git remote set-url origin git@github-personal:user/repo.git

六、工程经验

大规模使用时,推荐:

1
2
3
Host github-*
HostName github.com
User git

然后只为每个账号单独指定:

1
2
Host github-work
IdentityFile ~/.ssh/id_ed25519_work

配置更整洁,当 SSH config 被正确利用时,一台机器可以优雅管理十几个账号和 key,开发者几乎感觉不到存在。这也是 Unix 工具哲学的魅力:复杂性被压缩进一个简洁规则中,而规则一旦理解,世界就安静了