SSH 密钥隔离 + config 别名绑定,从原理到实操多账号无缝切换
在日常开发中,很多开发者会同时使用多个 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(公钥)。
# 复制工作账号公钥(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 账号。
# 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
# 测试工作账号
ssh -T git@github-work
# 测试个人账号
ssh -T git@github-personal
Hi [你的账号名]! You've successfully authenticated...,说明配置生效。登录对应 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
# 进入仓库目录
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 全局设置,否则会导致所有仓库提交信息混乱。| 问题 | 排查方向 |
|---|---|
| Permission denied (publickey) | 检查 config 文件中私钥路径是否正确;确认公钥已上传到对应 GitHub 账号;验证私钥 / config 文件权限是否为 600 |
| 拉取代码时提示"仓库不存在" | 检查别名是否正确(如把 github-work 写成 github-work1);确认仓库地址中的账号名、项目名无误 |
| 提交代码后身份错误 | 未为仓库单独设置 user.name / user.email,需补充设置 |
若需配置第三个及以上账号,只需重复以下步骤:
ssh-keygen -t ed25519 -C "new@example.com" -f ~/.ssh/github_rsa_new;