Linux如何配置Git多用户_Linux生成多个SSH密钥切换【实战】

git clone走错ssh密钥是因为ssh客户端默认只用~/.ssh/id_rsa,需通过~/.ssh/config配置host别名映射域名与对应identityfile,且git远程url必须改用该别名(如git@github-personal),否则无法触发路由规则。

linux如何配置git多用户_linux生成多个ssh密钥切换【实战】

为什么git clone总走错SSH密钥?

因为 Git 本身不管理 SSH 密钥,它只通过 SSH 客户端(ssh)连接远程仓库;而 ssh 默认只用 ~/.ssh/id_rsa。你配了多个密钥,但没告诉 ssh「哪个域名该用哪个密钥」,它就永远只试第一个——结果就是权限拒绝(Permission denied (publickey))。

关键不在 Git 配置,而在 ~/.ssh/config 的 Host 别名路由规则。

  • 每个 GitHub/GitLab 账号必须对应一个独立的 SSH key 对(不能共用 id_rsa
  • 远程 URL 必须改用自定义 Host 名(如 github-personal),不能继续用 git@github.com
  • ssh -T git@github.com 这类直连测试会失败——它绕过了 ~/.ssh/config 的路由逻辑

怎么生成并绑定多个 SSH 密钥?

-f 指定密钥路径,-C 加邮箱注释(仅作标识,不影响功能):

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "me@personal.com"
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "me@company.com"

然后在 ~/.ssh/config 中写明 Host 映射和密钥路径:

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
<p>Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
  • Host 名(如 github-personal)是你自己起的别名,后续所有 Git 操作都得用它
  • HostName 是真实域名,User 固定为 git(GitHub/GitLab 均如此)
  • 不要漏掉 IdentityFile 的完整路径,波浪号 ~ 在 config 里不展开,得写成 /home/you/.ssh/... 或用 $HOME

Git 仓库 URL 怎么切到对应用户?

克隆或修改 remote URL 时,把 git@github.com:user/repo 换成你定义的 Host 别名:

Khroma

Khroma

AI调色盘生成工具

下载

git clone git@github-personal:user/repo.git
git remote set-url origin git@github-work:org/repo.git

验证是否生效:

ssh -T git@github-personal  # 应显示 Hi xxx! You've successfully authenticated...
git config --get remote.origin.url  # 确认输出是 git@github-work:... 而非 git@github.com
  • 已存在的仓库必须手动 git remote set-url,Git 不会自动识别你新配的 Host
  • 如果 push 仍报权限错,先运行 ssh -vT git@github-personal 看日志里实际加载了哪个 IdentityFile
  • 别在 .git/config 里硬编码 sshCommand = ssh -i ...——这会覆盖 ~/.ssh/config,且无法按 Host 区分

为什么git push有时还是用错密钥?

最常见原因是:URL 里混用了原始域名和自定义 Host。比如 remote 设置成 git@github.com:user/repo,但你期望它走 github-personal 规则——不可能,ssh 根本不会查 config。

另一个隐蔽坑:~/.ssh/config 文件权限太宽松(如 644),ssh 会直接拒绝读取:

chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_ed25519_*
  • Windows WSL 用户注意:Windows 文件系统挂载点下的 ~/.ssh 可能因 NTFS 权限导致 chmod 失效,建议把密钥放在 Linux 原生分区
  • 公司 GitLab 自托管实例若用了非标准端口(如 2222),要在 config 里加 Port 2222
  • 别依赖 ssh-agent 的自动加载——它只缓存已用过的密钥,首次连接仍靠 config 指引

Git 多用户本质是 SSH 层的路由问题,不是 Git 配置问题;一旦 Host 别名、URL、config 三者对不上,就会静默 fallback 到默认密钥——而这个过程没有任何提示。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享