在日常开发中,很多开发者会同时使用多个 GitHub 账号(比如工作账号、个人账号),如果直接共用一套 SSH 密钥,会导致权限混乱、代码提交身份错误等问题。本文将从原理到实操,教你如何为多个 GitHub 账号配置独立的 SSH 密钥,以及如何正确拉取对应账号的代码。
一、核心原理
SSH 密钥是本地与 GitHub 认证的 "身份证",每个 GitHub 账号可绑定独立的 SSH 密钥。单台电脑区分多账号的关键是:
- 为每个 GitHub 账号生成独立的 SSH 密钥文件;
- 通过
config配置文件建立 "别名 - 密钥 - 账号" 的对应关系; - 拉取 / 推送代码时,用自定义别名替代默认的
github.com,让 Git 自动匹配对应密钥
二、前置准备
- 已安装 Git(Windows/macOS/Linux 均可);
- 拥有两个及以上 GitHub 账号;
- 知晓本地家目录路径(Windows:
C:\Users\你的用户名;macOS/Linux:/Users/你的用户名或/home/你的用户名)。
三、实操步骤(以 2 个 GitHub 账号为例)
步骤 1:为不同 GitHub 账号生成独立 SSH 密钥
打开终端(Windows 用 Git Bash/CMD,macOS/Linux 用终端),分别为两个账号生成密钥(文件名需区分,比如 github_rsa_work(工作)、github_rsa_personal(个人))。
命令格式
bash
# 生成工作账号密钥(替换为工作账号邮箱)
ssh-keygen -t ed25519 -C "work@example.com" -f $HOME/.ssh/github_rsa_work
# 生成个人账号密钥(替换为个人账号邮箱)
ssh-keygen -t ed25519 -C "personal@example.com" -f $HOME/.ssh/github_rsa_personal
执行交互
命令执行后会提示输入 "密码短语(passphrase)",建议直接按回车留空(方便日常使用;若设置密码,每次拉 / 推代码需验证):
plaintext
yaml
Enter passphrase (empty for no passphrase): # 回车
Enter same passphrase again: # 再次回车
验证生成结果
执行后会在 ~/.ssh 目录下生成 4 个文件:
- 工作账号:
github_rsa_work(私钥)、github_rsa_work.pub(公钥); - 个人账号:
github_rsa_personal(私钥)、github_rsa_personal.pub(公钥)。
步骤 2:将公钥分别添加到对应 GitHub 账号
SSH 密钥分 "公钥" 和 "私钥",需将公钥上传到 GitHub 账号,私钥保存在本地。
1. 复制公钥内容
bash
# 复制工作账号公钥(Windows 用 type 替代 cat)
cat ~/.ssh/github_rsa_work.pub
# 复制个人账号公钥
cat ~/.ssh/github_rsa_personal.pub
复制终端输出的完整内容(以 ssh-ed25519 开头,邮箱结尾)。
2. 上传公钥到 GitHub
以工作账号为例,操作流程:
- 登录工作 GitHub 账号 → 点击右上角头像 →
Settings; - 左侧菜单选择
SSH and GPG keys→ 点击New SSH key; Title:填备注(如Mac-work-github),便于识别;Key:粘贴复制的公钥内容 → 点击Add SSH key;- 重复上述步骤,将个人账号的公钥上传到个人 GitHub 账号。
步骤 3:配置 SSH config 文件(核心)
config 文件是 Git 识别不同账号密钥的 "规则表",需在 .ssh 目录下创建 / 编辑该文件。
1. 打开 config 文件
bash
# Windows/macOS/Linux 通用(无文件则新建)
vim ~/.ssh/config
2. 写入配置内容
bash
# 工作 GitHub 账号配置
Host github-work # 自定义别名(可任意命名,如 github-work)
HostName github.com # 固定为 github.com,不可改
User git # 固定为 git,不是你的 GitHub 用户名
IdentityFile ~/.ssh/github_rsa_work # 绑定工作账号私钥
PreferredAuthentications publickey
# 个人 GitHub 账号配置
Host github-personal # 自定义别名(如 github-personal)
HostName github.com
User git
IdentityFile ~/.ssh/github_rsa_personal # 绑定个人账号私钥
PreferredAuthentications publickey
3. 保存并设置权限
-
vim 中按
Esc→ 输入:wq→ 回车保存; -
设置文件权限(避免 SSH 认证失败,macOS/Linux 必做,Windows 可选):
bash# 设置 config 文件权限 chmod 600 ~/.ssh/config # 设置私钥权限 chmod 600 ~/.ssh/github_rsa_work chmod 600 ~/.ssh/github_rsa_personal
步骤 4:测试 SSH 连接
验证每个账号是否能正常认证:
perl
# 测试工作账号
ssh -T git@github-work
# 测试个人账号
ssh -T git@github-personal
若返回 Hi [你的账号名]! You've successfully authenticated...,说明配置生效。
四、拉取对应账号的代码(实操)
配置完成后,拉取代码的核心是用自定义别名替换仓库地址中的 github.com。
场景 1:克隆新仓库
1. 复制仓库 SSH 地址
登录对应 GitHub 账号 → 打开仓库 → 点击 Code → SSH → 复制地址(如 git@github.com:work-account/project.git)。
2. 替换别名并克隆
-
工作仓库:将
github.com替换为github-workbashgit clone git@github-work:work-account/project.git -
个人仓库:将
github.com替换为github-personalbashgit clone git@github-personal:personal-account/notes.git
场景 2:修改已克隆仓库的远程地址
若仓库已克隆(默认用 github.com 地址),需修改远程地址匹配对应账号:
bash
# 进入仓库目录
cd project
# 修改为工作账号地址
git remote set-url origin git@github-work:work-account/project.git
补充:设置提交身份(避免信息混淆)
SSH 解决 "认证" 问题,而提交代码的身份由 user.name/user.email 决定,需为每个仓库单独设置:
arduino
# 进入工作仓库,设置工作账号信息
git config user.name "WorkName"
git config user.email "work@example.com"
# 进入个人仓库,设置个人账号信息
git config user.name "PersonalName"
git config user.email "personal@example.com"
⚠️ 不要用 git config --global 全局设置,否则会导致所有仓库提交信息混乱。
五、常见问题排查
-
Permission denied (publickey) :
- 检查
config文件中私钥路径是否正确; - 确认公钥已上传到对应 GitHub 账号;
- 验证私钥 /
config文件权限是否为 600(macOS/Linux)。
- 检查
-
拉取代码时提示 "仓库不存在" :
- 检查别名是否正确(如把
github-work写成github-work1); - 确认仓库地址中的账号名、项目名无误。
- 检查别名是否正确(如把
-
提交代码后身份错误:
- 未为仓库单独设置
user.name/user.email,需补充设置。
- 未为仓库单独设置
六、扩展:添加更多 GitHub 账号
若需配置第三个及以上账号,只需重复以下步骤:
- 生成新密钥:
ssh-keygen -t ed25519 -C "new@example.com" -f ~/.ssh/github_rsa_new; - 上传新公钥到对应 GitHub 账号;
- 在
config文件中新增一段配置(自定义新别名,绑定新私钥); - 拉取代码时用新别名替换
github.com。
总结
- 多 GitHub 账号配置的核心是 "独立密钥 + config 别名绑定";
- 拉取代码的关键是用自定义别名替代
github.com; - 提交代码时需为仓库单独设置
user.name/user.email,避免身份混淆。通过以上配置,单台电脑可无缝切换多个 GitHub 账号,既保证了权限隔离,又能高效管理不同账号的代码仓库。