如何通过不同的SSH密钥管理多个Github账户

我们都知道Github支持用SSH Key授权登录,这样可以免去每次提交代码都要使用账号密码登录的麻烦。SSH Key可以通过ssh-keygen命令生成一对公私钥在~/.ssh目录中。只需要把公钥配置到Github账户设置就可以,每次使用git命令操作时会默认使用~/.ssh/id_rsa这个私钥文件授权。

Github配置ssh key

当你使用多个Github账户之后,你会遇到多账户管理的问题。因为同一个对公私钥只能配置到一个Github账户上,其他账户如果也要用SSH Key的方式,需要再生成一对公私钥。生成另一对公私钥,把公钥配置到新的Github账户不麻烦,但是别忘了本地git命令默认使用的私钥就是最初那个id_rsa文件,怎么改变git使用的私钥文件就能解决多账户管理的问题。

我看了网上的其他文章都是要配置~/.ssh/config这个文件,这个方法造成的麻烦会更多,我介绍另外一种简单易操作的方法。

GIT_SSH_COMMAND

在操作git指令时,有一个环境变量我们没有注意过,使用GIT_SSH_COMMAND可以在操作不同账户时指定不同的私钥文件

假如我们有第二个Github账户kakegu,账户里有个仓库test

  1. 生成新的公私钥对,命名为kakegu,执行命令后~/.ssh目录下会生成两个文件
$ ssh-keygen -f ~/.ssh/kakegu

$ cd ~/.ssh && ls
$ kakegu kakegu.pub
  1. 配置公钥到新的kakegu这个Github账户上
  2. 使用GIT_SSH_COMMAND指定私钥文件,然后clone仓库下来,也可以使用其他git命令
$ GIT_SSH_COMMAND="ssh -i ~/.ssh/kakegu" git clone [email protected]:kakegu/test.git

不用担心指定私钥之后会改变默认环境,因为这条命令必须连起来使用才可以指向特定的文件,如果前面不加GIT_SSH_COMMAND,就还是默认的git账户私钥。

我们已经解决了多账户控制的问题,但是还是有点麻烦,因为每次操作前面都要加一些代码。这只是让大家能理解git的确有这个环境变量可以配置,接下来我们只需要把不同的配置放到~/.bashrc里就可以了,如果你用的zsh就放到~/.zshrc

alias kakegu='GIT_SSH_COMMAND="ssh -i ~/.ssh/kakegu"'

然后执行source ~/.bashrc让配置生效。这样我们就不用前面加这么多代码了,如果我想用kakegu这个账户,那我只需要在前面加上kakegu既可以,因为我们前面已经配置过alias

$ kakegu git clone [email protected]:kakegu/test.git

这样看起来就很简单,不管多少Github账户或者Gitee、Gitlab,总之就是给新的公私钥起个名字,alias变量和github账户名最好对应,这样自己也明白使用的是哪个账户。

你可能感兴趣的:(如何通过不同的SSH密钥管理多个Github账户)