1. 引言
在日常开发中,我们经常需要在一台电脑上使用多个 GitHub 账号,例如:
- 个人账号用于开源项目
- 公司账号用于工作项目
- 客户账号用于特定合作项目
如果所有项目都使用同一个 SSH Key,会导致权限混乱、提交记录错乱等问题。本文将详细介绍如何在一台电脑上配置多个 SSH Key,让每个 GitHub 账号使用独立的密钥对,实现清晰的身份隔离。
2. 准备工作
2.1 检查现有 SSH 配置
首先,检查你的电脑上是否已有 SSH Key:
bash
ls -al ~/.ssh
如果看到 id_rsa、id_rsa.pub 等文件,说明已有默认的 SSH Key。
2.2 确定需要配置的账号数量
假设我们需要配置两个 GitHub 账号:
- 个人账号 :
personal@example.com - 工作账号 :
work@company.com
3. 生成多个 SSH Key
3.1 生成个人账号的 SSH Key
bash
ssh-keygen -t rsa -b 4096 -C "personal@example.com" -f ~/.ssh/id_rsa_personal
执行命令后,系统会提示:
- 输入保存密钥的文件名(已指定为
~/.ssh/id_rsa_personal) - 设置密码(可选,按 Enter 跳过)
- 确认密码
3.2 生成工作账号的 SSH Key
bash
ssh-keygen -t rsa -b 4096 -C "work@company.com" -f ~/.ssh/id_rsa_work
现在你的 ~/.ssh 目录下应该有:
id_rsa_personal(私钥)id_rsa_personal.pub(公钥)id_rsa_work(私钥)id_rsa_work.pub(公钥)
4. 将公钥添加到 GitHub
4.1 复制公钥内容
查看并复制个人账号的公钥:
bash
cat ~/.ssh/id_rsa_personal.pub
4.2 在 GitHub 中添加 SSH Key
- 登录个人 GitHub 账号
- 点击右上角头像 → Settings
- 左侧菜单选择 SSH and GPG keys
- 点击 New SSH key
- 填写:
- Title :
Personal Laptop(可自定义) - Key type:保持默认
- Key:粘贴刚才复制的公钥内容
- Title :
- 点击 Add SSH key
4.3 重复为工作账号添加
用同样的方法将 id_rsa_work.pub 添加到工作 GitHub 账号。
5. 配置 SSH Config 文件
5.1 创建或编辑配置文件
bash
nano ~/.ssh/config
5.2 添加多账号配置
在文件中添加以下内容:
bash
# 个人账号配置
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
IdentitiesOnly yes
# 工作账号配置
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
IdentitiesOnly yes
配置说明:
Host:自定义的主机别名,用于区分不同账号HostName:实际的 GitHub 服务器地址IdentityFile:指定该连接使用的私钥文件IdentitiesOnly yes:强制使用指定的私钥,不尝试其他密钥
6. 测试 SSH 连接
6.1 测试个人账号连接
bash
ssh -T git@github.com-personal
如果配置正确,会显示:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
6.2 测试工作账号连接
bash
ssh -T git@github.com-work
同样会显示对应账号的欢迎信息。
7. 克隆和配置仓库
7.1 克隆个人项目
使用自定义的主机别名克隆:
bash
git clone git@github.com-personal:username/personal-project.git
7.2 克隆工作项目
bash
git clone git@github.com-work:company/work-project.git
7.3 设置仓库级别的 Git 配置
进入项目目录,设置该仓库使用的用户名和邮箱:
bash
cd personal-project
git config user.name "Your Personal Name"
git config user.email "personal@example.com"
bash
cd work-project
git config user.name "Your Work Name"
git config user.email "work@company.com"
8. 已存在仓库的配置修改
如果已有仓库之前使用的是默认配置,需要修改远程仓库地址:
8.1 查看当前远程地址
bash
git remote -v
8.2 修改远程地址
将 github.com 替换为对应的主机别名:
bash
# 个人项目
git remote set-url origin git@github.com-personal:username/repo.git
# 工作项目
git remote set-url origin git@github.com-work:company/repo.git
9. 常见问题与解决方案
9.1 权限被拒绝 (Permission denied)
可能原因:
- 私钥文件权限不正确
- SSH Agent 未加载密钥
解决方案:
bash
# 修复私钥权限
chmod 600 ~/.ssh/id_rsa_personal
chmod 600 ~/.ssh/id_rsa_work
# 启动 SSH Agent 并添加密钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_personal
ssh-add ~/.ssh/id_rsa_work
9.2 提交记录显示错误邮箱
解决方案 :
确保在每个仓库中正确设置了 user.name 和 user.email。
9.3 需要临时切换账号
如果某个项目需要临时使用另一个账号,可以临时修改 Git 配置:
bash
git config user.email "other@email.com"
10. 进阶配置
10.1 使用 Include 条件配置
对于更复杂的场景,可以使用条件配置:
bash
# ~/.gitconfig
[includeIf "gitdir:~/personal/"]
path = .gitconfig-personal
[includeIf "gitdir:~/work/"]
path = .gitconfig-work
10.2 自动化脚本
创建自动化脚本简化操作:
bash
#!/bin/bash
# switch-git-profile.sh
case $1 in
personal)
git config user.name "Personal Name"
git config user.email "personal@example.com"
echo "Switched to personal profile"
;;
work)
git config user.name "Work Name"
git config user.email "work@company.com"
echo "Switched to work profile"
;;
*)
echo "Usage: $0 {personal|work}"
;;
esac
11. 总结
通过以上步骤,你可以:
- ✅ 为每个 GitHub 账号生成独立的 SSH Key
- ✅ 在 SSH Config 中配置多账号映射
- ✅ 使用不同的主机别名克隆和操作仓库
- ✅ 确保提交记录显示正确的身份信息
这种配置方式不仅适用于 GitHub,也适用于 GitLab、Bitbucket 等其他 Git 托管服务。保持账号隔离能让你的开发工作更加清晰、专业。
最佳实践建议:
- 定期轮换 SSH Key(每年一次)
- 为不同设备使用不同的 Key
- 使用密码保护私钥文件
- 备份
~/.ssh/config文件