Appearance
Git多SSH账户配置完全指南(跨平台通用)

问题场景
无论你用的是 macOS、Linux 还是 Windows,只要在同一台电脑上同时使用公司Git账号(如内部GitLab)和个人Git账号(如GitHub),都会遇到:
- SSH密钥冲突:默认
~/.ssh/id_rsa只能配一个账号 - Commit记录混乱:全局
user.name/user.email会让所有提交都变成同一个人
本文提供跨平台通用解决方案,各平台差异处会特别标注。
一、取消全局账号设定
bash
git config --global --unset user.name
git config --global --unset user.email💡 验证:
git config --global --list
二、生成独立的SSH密钥对
bash
# 默认账号(如 fly)
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/id_rsa
# 个人账号(如 fishfinal)
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/id_rsa_fishfinal📁 密钥默认存放路径:
~/.ssh/(Windows 为%USERPROFILE%\.ssh\)
三、配置SSH Config文件(核心)
创建/编辑 ~/.ssh/config (Windows路径:%USERPROFILE%\.ssh\config):
bash
# 默认账号(fly)- 使用 github.com
Host github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# 个人账号(fishfinal)- 使用二级域名别名
Host fishfinal.github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_fishfinal🔑 核心设计理念:将 GitHub 账号名作为二级域名前缀,如
fishfinal.github.com,语义清晰,一目了然。
四、添加密钥到SSH Agent
macOS
bash
# 添加并存入钥匙串(免重复输密码)
ssh-add --apple-use-keychain ~/.ssh/id_rsa
ssh-add --apple-use-keychain ~/.ssh/id_rsa_fishfinal💡 注意
较新版本的 macOS/OpenSSH 中,--apple-use-keychain 选项可能已被弃用。如执行报错,请改用:
bash
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinalLinux (Ubuntu/Debian/CentOS等)
bash
# 启动ssh-agent(如未运行)
eval "$(ssh-agent -s)"
# 添加密钥
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinal
# 可选:永久记住密码(需要安装keychain)
# sudo apt install keychain # Debian/Ubuntu
# sudo yum install keychain # CentOS
# echo 'eval $(keychain --eval --agents ssh id_rsa id_rsa_fishfinal)' >> ~/.bashrcWindows (Git Bash / PowerShell / WSL2)
Git Bash 方式:
bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinalPowerShell (配合OpenSSH):
powershell
# 启动ssh-agent服务
Start-Service ssh-agent
# 添加密钥
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinalWSL2 (Ubuntu): 同Linux方法
五、将公钥添加到Git服务商
复制公钥(各平台通用方法):
bash
# macOS / Linux
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa_fishfinal.pub
# 或直接复制到剪贴板
pbcopy < ~/.ssh/id_rsa_fishfinal.pub # macOS
xclip -sel clip < ~/.ssh/id_rsa_fishfinal.pub # Linux (需安装xclip)
# Windows (Git Bash)
cat ~/.ssh/id_rsa_fishfinal.pub
# PowerShell
Get-Content ~/.ssh/id_rsa_fishfinal.pub | Set-Clipboard然后分别将每个公钥添加到对应 GitHub 账号的 Settings → SSH and GPG keys 中。
六、测试连接
bash
# 测试默认账号(fly)
ssh -T [email protected]
# 成功输出:Hi fly! You've successfully authenticated...
# 测试个人账号(fishfinal)
ssh -T [email protected]
# 成功输出:Hi fishfinal! You've successfully authenticated...🐧 Linux 用户如果遇到权限问题:
chmod 600 ~/.ssh/id_rsa_*
七、使用配置(实战操作)
1. 克隆新仓库
bash
# 默认账号(fly)的项目,直接使用 github.com
git clone [email protected]:fly/some-repo.git
# 个人账号(fishfinal)的项目,使用二级域名别名
git clone [email protected]:fishfinal/go-gateway-demo.git2. 已有仓库修改远程地址
bash
cd existing-project
# 修改为 fishfinal 账号的仓库地址
git remote set-url origin [email protected]:fishfinal/go-gateway-demo.git
# 验证修改结果
git remote -v3. 为每个项目单独设置用户信息
bash
# 进入个人项目目录
cd ~/projects/go-gateway-demo
git config user.name "fishfinal"
git config user.email "[email protected]"
# 进入默认项目目录
cd ~/work/default-project
git config user.name "fly"
git config user.email "[email protected]"⚠️ 不要加
--global,这样只影响当前项目。
4. 验证配置
bash
# 查看当前项目的用户配置
git config user.name
git config user.email
# 查看远程仓库地址
git remote -v
# 测试推送权限
git push --dry-run八、方案优势总结
| 特性 | 说明 |
|---|---|
| 语义清晰 | fishfinal.github.com 一看就知道对应哪个账号 |
| 无需记忆 | 别名本身就是有意义的域名,不是随机的抽象名称 |
| 默认友好 | github.com 作为默认账号,日常操作零心智负担 |
| 切换直观 | 只需在域名前加上账号名即可切换 |
九、跨平台命令速查表
| 操作 | macOS | Linux | Windows (Git Bash) |
|---|---|---|---|
| 复制公钥到剪贴板 | pbcopy < ~/.ssh/id_rsa.pub | xclip -sel clip < ~/.ssh/id_rsa.pub | cat ~/.ssh/id_rsa.pub | clip |
| SSH密钥存放位置 | ~/.ssh/ | ~/.ssh/ | %USERPROFILE%\.ssh\ |
| 权限修复 | 一般不需要 | chmod 600 ~/.ssh/id_rsa_* | 一般不需要 |
| SSH Agent持久化 | --apple-use-keychain | keychain工具 | Windows服务自动启动 |
常见问题排查
Permission denied (publickey)
- 检查公钥是否已添加到对应的 GitHub 账号
- Linux/Mac 检查密钥权限:
chmod 600 ~/.ssh/id_rsa_* - 执行
ssh -vT git@你的Host别名查看详细日志
测试时总是返回同一个账号
- 检查
~/.ssh/config中是否有多个 Host 使用了相同的 IdentityFile - 确认 ssh-agent 中加载了正确的密钥:
ssh-add -l - 使用
ssh -T -i ~/.ssh/指定私钥 [email protected]单独测试每个密钥
Windows下ssh-add失败
powershell
# 以管理员身份运行PowerShell
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
ssh-add ~/.ssh/id_rsa_fishfinalLinux重启后需要重新添加密钥
安装 keychain 工具永久化:
bash
# Ubuntu/Debian
sudo apt install keychain
# 添加到~/.bashrc
echo 'eval $(keychain --eval --agents ssh id_rsa id_rsa_fishfinal)' >> ~/.bashrc
source ~/.bashrcCommit作者还是旧信息
- 确认执行过
git config --global --unset user.name/user.email - 检查项目下的
.git/config文件确认 local 配置已生效
总结流程图
参考资料
如果本文对你有帮助,欢迎分享给同样需要多账户管理的开发者!
