你是否遇到过这样的场景?
- 公司用 GitLab,个人项目用 GitHub,偶尔还要提交到 Gitee;
- 公司内部还有多个 Git 仓库(如
gitlab.dbblive.com和code.internal.com); - 每个平台要求使用不同的邮箱或独立的 SSH 密钥。
此时,如果你只用一个默认的~/.ssh/id_rsa,轻则提交记录混用身份,重则因密钥不匹配导致“Permission denied (publickey)”错误。
别担心!一台电脑完全可以管理多个 Git 账号和多个 SSH 密钥。本文将手把手教你如何生成、配置并高效使用多套 SSH 密钥,让你的 Git 提交既安全又清晰。
一、原理简述:SSH + Git 是如何认证的?
Git 通过 SSH 协议连接远程仓库时,会使用 SSH 密钥对进行身份验证:
- 公钥(
.pub):上传到 Git 平台(如 GitHub / GitLab)。 - 私钥(无后缀):保存在本地
~/.ssh/目录,绝不外泄。
默认情况下,SSH 客户端会尝试使用~/.ssh/id_rsa(或id_ed25519)作为私钥。
但当我们有多个账号时,就需要为每个平台/账号指定独立的密钥对,并通过~/.ssh/config文件告诉 SSH:“连接 A 平台用密钥1,连接 B 平台用密钥2”。
二、实操步骤:生成并配置多套 SSH 密钥
Step 1:为不同平台生成独立密钥对
假设你要管理两个平台:
- 公司 GitLab:
git@gitlab.dbblive.com - 个人 GitHub:
git@github.com
执行以下命令(建议使用Ed25519 算法,更安全高效):
# 为公司 GitLab 生成密钥ssh-keygen -t ed25519 -C"your.name@dbblive.com"-f ~/.ssh/id_ed25519_dbblive# 为个人 GitHub 生成密钥ssh-keygen -t ed25519 -C"your.personal@gmail.com"-f ~/.ssh/id_ed25519_github💡 提示:
-C后是注释(通常为邮箱),便于识别;-f指定输出文件名,避免覆盖默认密钥;- 按提示输入密码(passphrase)可增强安全性(可选)。
生成后,你会看到:
~/.ssh/ ├── id_ed25519_dbblive ├── id_ed25519_dbblive.pub ├── id_ed25519_github └── id_ed25519_github.pubStep 2:将公钥上传到对应平台
分别复制公钥内容并粘贴到各平台的SSH Keys 设置页:
# 查看公钥cat~/.ssh/id_ed25519_dbblive.pubcat~/.ssh/id_ed25519_github.pub- GitLab:
Settings → SSH Keys - GitHub:
Settings → SSH and GPG keys
✅ 确保公钥完整(以
ssh-ed25519 AAAA...开头,结尾是你的邮箱)
Step 3:配置~/.ssh/config文件(关键!)
创建或编辑~/.ssh/config,添加主机别名和密钥映射:
# 公司 GitLab Host gitlab.dbblive.com HostName gitlab.dbblive.com User git IdentityFile ~/.ssh/id_ed25519_dbblive IdentitiesOnly yes # 个人 GitHub Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github IdentitiesOnly yes🔑 参数说明:
Host:你可以自定义别名(如gitlab-work),但建议直接用真实域名,避免 Git URL 不一致;IdentityFile:指定私钥路径;IdentitiesOnly yes:非常重要!强制 SSH 只使用本配置指定的密钥,避免尝试其他密钥导致认证失败。
Step 4:设置 Git 用户名和邮箱(按项目)
在每个项目目录中单独配置 Git 用户信息,避免全局混用:
# 进入公司项目cd~/projects/dbb_web_walletgitconfig user.name"Wanyan Zhenjiang"gitconfig user.email"your.name@dbblive.com"# 进入个人项目cd~/projects/my-bloggitconfig user.name"Zhenjiang Wan"gitconfig user.email"your.personal@gmail.com"✅ 这样,提交记录中的作者信息也会正确对应。
三、验证配置是否成功
# 测试公司 GitLabssh-T git@gitlab.dbblive.com# 测试个人 GitHubssh-T git@github.com如果看到类似Welcome to GitLab, @yourname!或Hi yourname! You've successfully authenticated...,说明配置成功!
⚠️ 如果失败,请检查:
- 公钥是否正确上传;
~/.ssh/config权限是否为600(执行chmod 600 ~/.ssh/config);- 是否启用了
IdentitiesOnly yes。
四、常见误区与最佳实践
❌ 误区1:所有项目用同一个 SSH 密钥
→ 导致身份混乱,且不符合企业安全规范。
❌ 误区2:用软链接切换密钥
→ 容易出错,且无法同时支持多个平台。
✅ 推荐做法:
- 每个平台/账号独立密钥;
- 通过
~/.ssh/config精确路由; - 项目级配置 Git 用户信息;
- 私钥文件命名清晰(如
id_ed25519_github、id_rsa_tongcheng-test);
📌 注:根据你的习惯,你倾向于直接使用具体私钥文件路径(如
/root/.ssh/id_rsa_tongcheng-test),而非软链接,这种做法更安全、可追溯。
五、扩展:配合 Jenkins 或自动化脚本使用
在 Jenkins Pipeline 或自动化部署脚本中,可通过-i指定私钥:
ssh-i ~/.ssh/id_ed25519_dbblive user@server"command"或在scp、rsync中使用:
scp-i ~/.ssh/id_ed25519_dbblive file.txt user@server:/path/确保私钥文件权限为600,避免 SSH 拒绝加载。
六、总结
管理多 Git 账号不再是难题。只需三步:
- 生成多套密钥(
ssh-keygen -f); - 配置
~/.ssh/config实现自动路由; - 项目级设置 Git 用户信息。
从此,公司代码和个人项目井水不犯河水,提交记录清晰,权限控制精准,安全合规一步到位。
花一个晚上配置好,未来每天都能高效、安心地git push!
附:常用命令速查
# 生成密钥ssh-keygen -t ed25519 -C"email@example.com"-f ~/.ssh/id_ed25519_name# 查看公钥cat~/.ssh/id_ed25519_name.pub# 测试连接ssh-T git@hostname# 修复权限chmod700~/.sshchmod600~/.ssh/*chmod600~/.ssh/config