一台电脑配置多个 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 文件
相关推荐
一点一木3 小时前
🚀 2026 年 6 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
SkyWalking中文站18 小时前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
火车叼位21 小时前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
OpenTiny社区1 天前
从零开发 AI 聊天页要两周?试试这款 Vue3 垂直对话组件库 TinyRobot,直接开箱即用
前端·vue.js·github
逛逛GitHub1 天前
2 万多 Star!Google 开源了这个神级 GitHub 项目。
github
逛逛GitHub1 天前
免费 Token 烧掉 5 万亿之后,他们出了个一站式创作平台。
github
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
inhere1 天前
eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具
程序员·开源·github
小猿姐1 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站2 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维