很多人一台电脑既要用公司 GitHub,又要用个人 GitHub / Gitee。默认情况下,SSH 只会拿“第一个匹配的密钥”去认证,结果就出现:拉取没问题、推送提示无权限,或者推到错误账号名下。
这篇教程用“不同 Host 别名 + 不同密钥文件”的方式,让每个仓库固定走对应账号,Windows / macOS / Linux 都通用。
进入你的 ~/.ssh 目录(没有就创建),分别生成两套密钥。下面以“GitHub 个人 + Gitee 工作”举例,你也可以按自己情况命名:
ssh-keygen -t ed25519 -C "github-personal" -f ~/.ssh/id_ed25519_github_personal ssh-keygen -t ed25519 -C "gitee-work" -f ~/.ssh/id_ed25519_gitee_work建议:可以设置 passphrase(更安全),后面用 ssh-agent 记住它。
编辑(或新建)~/.ssh/config,写入如下模板:
Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github_personal IdentitiesOnly yes Host gitee-work HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee_work IdentitiesOnly yes关键点解释:
分别打开两套公钥文件(.pub),复制内容到平台的 SSH Keys 管理页面。
公钥内容示例(复制整行):
cat ~/.ssh/id_ed25519_github_personal.pub cat ~/.ssh/id_ed25519_gitee_work.pub从这一步开始,你的仓库地址不要再写默认的 git@github.com:...,而是用你在 config 里定义的 Host:
# GitHub 个人仓库 git clone git@github-personal:YOUR_NAME/your-repo.git # Gitee 工作仓库 git clone git@gitee-work:YOUR_ORG/your-repo.git如果仓库已经存在,也可以改远端地址:
git remote -v git remote set-url origin git@github-personal:YOUR_NAME/your-repo.git在终端测试连通性(不会真正推送代码):
ssh -T git@github-personal ssh -T git@gitee-work你应该看到欢迎信息(GitHub 会提示你已成功认证但没有 shell 访问,这是正常的)。
如果你给密钥设置了 passphrase,可以启用 ssh-agent,把密钥加入缓存。不同系统启用方式略有差异,你只要记住一句原则:只给当前账号需要的密钥加入即可,避免过多密钥同时生效。