一台电脑配置多个 SSH Key 对应不同的 GitHub 账号

1. 引言

在日常开发中,我们经常需要在一台电脑上使用多个 GitHub 账号,例如:

  • 个人账号用于开源项目
  • 公司账号用于工作项目
  • 客户账号用于特定合作项目

如果所有项目都使用同一个 SSH Key,会导致权限混乱、提交记录错乱等问题。本文将详细介绍如何在一台电脑上配置多个 SSH Key,让每个 GitHub 账号使用独立的密钥对,实现清晰的身份隔离。

2. 准备工作

2.1 检查现有 SSH 配置

首先,检查你的电脑上是否已有 SSH Key:

bash 复制代码
ls -al ~/.ssh

如果看到 id_rsaid_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

  1. 登录个人 GitHub 账号
  2. 点击右上角头像 → Settings
  3. 左侧菜单选择 SSH and GPG keys
  4. 点击 New SSH key
  5. 填写:
    • TitlePersonal Laptop(可自定义)
    • Key type:保持默认
    • Key:粘贴刚才复制的公钥内容
  6. 点击 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)

可能原因

  1. 私钥文件权限不正确
  2. 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.nameuser.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. 总结

通过以上步骤,你可以:

  1. ✅ 为每个 GitHub 账号生成独立的 SSH Key
  2. ✅ 在 SSH Config 中配置多账号映射
  3. ✅ 使用不同的主机别名克隆和操作仓库
  4. ✅ 确保提交记录显示正确的身份信息

这种配置方式不仅适用于 GitHub,也适用于 GitLab、Bitbucket 等其他 Git 托管服务。保持账号隔离能让你的开发工作更加清晰、专业。

最佳实践建议

  • 定期轮换 SSH Key(每年一次)
  • 为不同设备使用不同的 Key
  • 使用密码保护私钥文件
  • 备份 ~/.ssh/config 文件
相关推荐
云登指纹浏览器2 小时前
WebDriver反检测技术详解:如何让自动化脚本看起来像真实浏览器
运维·自动化·跨境电商
xmtxz2 小时前
计算机网络基础课程学习心得:从理论抽象到硬核实战的进阶之路
运维·学习
RisunJan3 小时前
Linux命令-pgrep (通过进程名查找进程 ID)
linux·运维
信创工程师-小杨3 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
java知路4 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
2601_955505254 小时前
自然人身份确权可信基础设施赋能 DID 身份合规
运维·金融·区块链·健康医疗·智能硬件·教育电商·政务
難釋懷5 小时前
Nginx-KeepAlive
运维·nginx
2601_956414145 小时前
迈向智慧实验室:金现代的全链路质量管控与自动化解决方案
运维·自动化
Jurio.5 小时前
tmux 安装与使用教程:SSH 断开后任务继续运行,终端分屏与多窗口管理
linux·经验分享·ssh·tmux