同一台机器如何支持ssh免密多个github账户
一台机器同时给不同 GitHub 账号配不同 SSH 私钥,本质上是让 SSH 根据不同仓库地址自动选择不同 key。
- 核心思路是:
每个账号一把 key + SSH config 里定义多个 Host 别名 + clone 时用别名而不是默认域名。
一、为不同账号生成不同 SSH key
公司账号
1 | ssh-keygen -t ed25519 -C "work@example.com" \ |
个人账号
1 | ssh-keygen -t ed25519 -C "personal@example.com" \ |
最终得到:
1 | ~/.ssh/id_ed25519_work |
把各自 .pub 公钥添加到对应 GitHub 账号即可。
二、配置 ~/.ssh/config(关键步骤)
编辑:
1 | vim ~/.ssh/config |
写入:
1 | # 工作账号 |
区分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 | ssh -T git@github-work |
如果成功,会看到不同账号的欢迎信息。
五、老仓库如何切换账号?
改 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 | Host github-* |
然后只为每个账号单独指定:
1 | Host github-work |
配置更整洁,当 SSH config 被正确利用时,一台机器可以优雅管理十几个账号和 key,开发者几乎感觉不到存在。这也是 Unix 工具哲学的魅力:复杂性被压缩进一个简洁规则中,而规则一旦理解,世界就安静了。