Skip to content

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

Git多SSH账户配置示意图

问题场景

无论你用的是 macOS、Linux 还是 Windows,只要在同一台电脑上同时使用公司Git账号(如内部GitLab)和个人Git账号(如GitHub),都会遇到:

  1. SSH密钥冲突:默认 ~/.ssh/id_rsa 只能配一个账号
  2. 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_fishfinal

Linux (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)' >> ~/.bashrc

Windows (Git Bash / PowerShell / WSL2)

Git Bash 方式:

bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinal

PowerShell (配合OpenSSH):

powershell
# 启动ssh-agent服务
Start-Service ssh-agent

# 添加密钥
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_fishfinal

WSL2 (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.git

2. 已有仓库修改远程地址

bash
cd existing-project

# 修改为 fishfinal 账号的仓库地址
git remote set-url origin [email protected]:fishfinal/go-gateway-demo.git

# 验证修改结果
git remote -v

3. 为每个项目单独设置用户信息

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 作为默认账号,日常操作零心智负担
切换直观只需在域名前加上账号名即可切换

九、跨平台命令速查表

操作macOSLinuxWindows (Git Bash)
复制公钥到剪贴板pbcopy < ~/.ssh/id_rsa.pubxclip -sel clip < ~/.ssh/id_rsa.pubcat ~/.ssh/id_rsa.pub | clip
SSH密钥存放位置~/.ssh/~/.ssh/%USERPROFILE%\.ssh\
权限修复一般不需要chmod 600 ~/.ssh/id_rsa_*一般不需要
SSH Agent持久化--apple-use-keychainkeychain工具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_fishfinal

Linux重启后需要重新添加密钥

安装 keychain 工具永久化:

bash
# Ubuntu/Debian
sudo apt install keychain

# 添加到~/.bashrc
echo 'eval $(keychain --eval --agents ssh id_rsa id_rsa_fishfinal)' >> ~/.bashrc
source ~/.bashrc

Commit作者还是旧信息

  • 确认执行过 git config --global --unset user.name/user.email
  • 检查项目下的 .git/config 文件确认 local 配置已生效

总结流程图

参考资料


如果本文对你有帮助,欢迎分享给同样需要多账户管理的开发者!

最后更新2026/06/14 13:10
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal