使用不同的 ssh key 管理不同的 github 账户

生成不同的 ssh 密钥对

使用命令 ssh-keygen -t ed25519 -C '[email protected]' 可以生成密钥对。这里的 -t ed25519 指明了使用 ed25519 公钥加密算法。生成的过程中,系统会提示输入文件需要保存的路径,如果不输入,默认为:~/.ssh/id_ed25519~/.ssh/id_ed25519.pub

假设有两个 github 账户需要管理,用户名分别是:

使用上述命令分别生成两个密钥对:

自定义域名别名与私钥的对应关系

打开 ~/.ssh/config 文件,没有则新建一个。填入以下内容:

Host github.com-cat
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_cat
Host github.com-dog
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_cat

这里配置了两个域名别名,分别是 github.com-catgithub.com-dog,它们的真实域名都是指向 github.com,但是它们使用了不同的私钥。

配置 fetch url 和 push url

简略的说,设置远程 url 的时候,把其中的 [email protected] 替换为 [email protected] 或者 [email protected] 即可,ssh 就会去 ~/.ssh/config 文件中找对应的密钥。

详细步骤 :

  1. 使用命令 git remote add GithubCat [email protected]:cat/cat.git,为仓库添加 fetch url 和 push url。GithubCat,是别名,通常情况下,大家会把别名写为 origin。注意这里的 github.com-cat,这和 ~/.ssh/config 文件配置的别名要一致。
  2. 使用命令 git remote -v 可以查看已经存在的 fetch url 和 push url
  3. 使用命令 git push GithubCat myBranch,可以把本地的 myBranch 分支的代码推送到 GithubCat 指代的仓库中,并在远程仓库创建同名分支。如果想在以后执行 git push 的时候,默认使用 GithubCat 仓库的 myBranch 分支,可以执行一次 git push --set-upstream GithubCat myBranch 命令,可以简写为 git push -u GithubCat myBranch。这个命令的含意是,在未来的 git pushgit pull 命令中,如果没有指定远程仓库和分支,那么默认使用 GithubCat 仓库的 myBranch 分支。