我们都知道Github支持用SSH Key授权登录,这样可以免去每次提交代码都要使用账号密码登录的麻烦。SSH Key可以通过ssh-keygen
命令生成一对公私钥在~/.ssh
目录中。只需要把公钥配置到Github账户设置就可以,每次使用git命令操作时会默认使用~/.ssh/id_rsa
这个私钥文件授权。
当你使用多个Github账户之后,你会遇到多账户管理的问题。因为同一个对公私钥只能配置到一个Github账户上,其他账户如果也要用SSH Key的方式,需要再生成一对公私钥。生成另一对公私钥,把公钥配置到新的Github账户不麻烦,但是别忘了本地git命令默认使用的私钥就是最初那个id_rsa
文件,怎么改变git使用的私钥文件就能解决多账户管理的问题。
我看了网上的其他文章都是要配置~/.ssh/config
这个文件,这个方法造成的麻烦会更多,我介绍另外一种简单易操作的方法。
GIT_SSH_COMMAND
在操作git指令时,有一个环境变量我们没有注意过,使用GIT_SSH_COMMAND
可以在操作不同账户时指定不同的私钥文件
假如我们有第二个Github账户kakegu
,账户里有个仓库test
- 生成新的公私钥对,命名为kakegu,执行命令后
~/.ssh
目录下会生成两个文件
$ ssh-keygen -f ~/.ssh/kakegu
$ cd ~/.ssh && ls
$ kakegu kakegu.pub
- 配置公钥到新的kakegu这个Github账户上
- 使用
GIT_SSH_COMMAND
指定私钥文件,然后clone仓库下来,也可以使用其他git命令
$ GIT_SSH_COMMAND="ssh -i ~/.ssh/kakegu" git clone git@github.com: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 git@github.com:kakegu/test.git
这样看起来就很简单,不管多少Github账户或者Gitee、Gitlab,总之就是给新的公私钥起个名字,alias变量和github账户名最好对应,这样自己也明白使用的是哪个账户。