掘金文章归档 · 第 22 篇 Git / 工程化 系列 1/8 Git · SSH

同一电脑配置多 GitHub 账号

SSH 密钥隔离 + config 别名绑定,从原理到实操多账号无缝切换

原文作者:随意_(掘金) | juejin.cn/post/7604775190212165642 | 发布于 2026-02-10 | 阅读 378 · 约 5 分钟

0核心原理与前置准备

在日常开发中,很多开发者会同时使用多个 GitHub 账号(比如工作账号、个人账号),如果直接共用一套 SSH 密钥,会导致权限混乱、代码提交身份错误等问题。

📌 核心原理:SSH 密钥是本地与 GitHub 认证的"身份证"。单台电脑区分多账号的关键:
  • 为每个 GitHub 账号生成独立的 SSH 密钥文件
  • 通过 config 配置文件建立"别名 - 密钥 - 账号"的对应关系;
  • 拉取/推送代码时,用自定义别名替代默认的 github.com,让 Git 自动匹配对应密钥。

前置准备

1实操步骤:密钥 → 公钥 → config → 测试

步骤 1:为不同 GitHub 账号生成独立 SSH 密钥

打开终端(Windows 用 Git Bash/CMD,macOS/Linux 用终端),分别为两个账号生成密钥(文件名需区分,比如 github_rsa_work 工作、github_rsa_personal 个人)。

# 生成工作账号密钥(替换为工作账号邮箱)
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)",建议直接按回车留空(方便日常使用;若设置密码,每次拉/推代码需验证):

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 账号

# 复制工作账号公钥(Windows 用 type 替代 cat)
cat ~/.ssh/github_rsa_work.pub

# 复制个人账号公钥
cat ~/.ssh/github_rsa_personal.pub

复制终端输出的完整内容(以 ssh-ed25519 开头,邮箱结尾)。然后:登录工作 GitHub 账号 → 右上角头像 → Settings → 左侧 SSH and GPG keys → New SSH key → Title 填备注(如 Mac-work-github)→ Key 粘贴公钥内容 → Add SSH key。重复上述步骤将个人账号的公钥上传到个人 GitHub 账号。

步骤 3:配置 SSH config 文件(核心)

# Windows/macOS/Linux 通用(无文件则新建)
vim ~/.ssh/config
# 工作 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

vim 中按 Esc → 输入 :wq → 回车保存。然后设置文件权限(避免 SSH 认证失败,macOS/Linux 必做,Windows 可选):

# 设置 config 文件权限
chmod 600 ~/.ssh/config
# 设置私钥权限
chmod 600 ~/.ssh/github_rsa_work
chmod 600 ~/.ssh/github_rsa_personal

步骤 4:测试 SSH 连接

# 测试工作账号
ssh -T git@github-work

# 测试个人账号
ssh -T git@github-personal
✅ 若返回 Hi [你的账号名]! You've successfully authenticated...,说明配置生效。

2拉取对应账号的代码

场景 1:克隆新仓库

登录对应 GitHub 账号 → 打开仓库 → 点击 Code → SSH → 复制地址(如 git@github.com:work-account/project.git),替换别名并克隆:

# 工作仓库:将 github.com 替换为 github-work
git clone git@github-work:work-account/project.git

# 个人仓库:将 github.com 替换为 github-personal
git clone git@github-personal:personal-account/notes.git

场景 2:修改已克隆仓库的远程地址

# 进入仓库目录
cd project
# 修改为工作账号地址
git remote set-url origin git@github-work:work-account/project.git

补充:设置提交身份(避免信息混淆)

SSH 解决"认证"问题,而提交代码的身份由 user.name / user.email 决定,需为每个仓库单独设置:

# 进入工作仓库,设置工作账号信息
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 全局设置,否则会导致所有仓库提交信息混乱。

3常见问题排查与扩展

问题排查方向
Permission denied (publickey)检查 config 文件中私钥路径是否正确;确认公钥已上传到对应 GitHub 账号;验证私钥 / config 文件权限是否为 600
拉取代码时提示"仓库不存在"检查别名是否正确(如把 github-work 写成 github-work1);确认仓库地址中的账号名、项目名无误
提交代码后身份错误未为仓库单独设置 user.name / user.email,需补充设置

扩展:添加更多 GitHub 账号

若需配置第三个及以上账号,只需重复以下步骤:

  1. 生成新密钥:ssh-keygen -t ed25519 -C "new@example.com" -f ~/.ssh/github_rsa_new
  2. 上传新公钥到对应 GitHub 账号;
  3. 在 config 文件中新增一段配置(自定义新别名,绑定新私钥);
  4. 拉取代码时用新别名替换 github.com。
📌 总结:多 GitHub 账号配置的核心是"独立密钥 + config 别名绑定";拉取代码的关键是用自定义别名替代 github.com;提交代码时需为仓库单独设置 user.name / user.email,避免身份混淆。通过以上配置,单台电脑可无缝切换多个 GitHub 账号。