管理多个github账号的 ssh key
我们大多时候是通过ssh key
的方式来进行github
代码库的权限管理,如何生成一个ssh key
以及如何在github
设置网络上有各类的说明,不是本文的重点。本文要解决的是在一个机器上管理多个账号的方法。
出于各种原因,有些人会有多个github账号,比如一个个人账号,一个工作账号。而github是不允许两个账号出现相同的SSH KEY的。那么问题来了,我们为了方便,往往都是用ss-keygen
命令,一路默认参数在~/.ssh
目录下生成一对名为id_rsa
和id_rsa.pub
的密钥,然后把id_rsa.pub
贴到github的SSH and GPG keys
设置中去。
如何生成一个新的密钥给另一个账号,并且在使用的过程中尽量减少麻烦呢,我这里给出一种相对简便的方法。
1. 生成一对命名的ssh key
首先生成一对新的ssh key
,依然是用ssh-keygen
命令,只是这次不用默认的参数。
1 | ssh-keygen |
需要关注的是上边命令中的第3行,我们输入了/YourHomeDir/.ssh/account1
,也就是我们所希望的ssh密钥的名字以及路径,其他步骤基本都一样,一路默认参数回车就可以了。这是我们在/YourHomeDir/.ssh/
路径下生成了一对名为account1
和account1.pub
的新秘钥。
一定要注意新秘钥的命名,不要覆盖掉旧的秘钥造成不必要的麻烦。
2. 更改本地的SSH配置
1 | cd ~/.ssh |
上面的命令在ssh配置目录创建(如果不存在)一个config
文件,并用vim
打开编辑。通过vim
编辑加入如下配置:
1 | # 配置示例1 |
其中第1行中的xxxx
是一个代替github.com的名字,你可以用一个自己比较容易记得域名,比如我就比较喜欢这样:
1 | # 配置示例2 |
其中my-github-name
是对应我生成的这个ssh key
的github
账号的名字。
3. 将新生成的ssh key
加到github账号配置下
将第一步生成的秘钥对中的account1.pub
的内加入github账号的SSH and GPG keys
设置项中。因为是一个全新的秘钥,自是不会再出现添加不进去的问题。
4. 克隆新的项目
一般情况下,我们是通过如下的方式克隆一个项目:
1 | git clone git@github.com:your-account/your-prj.git |
我们需要对这个语句中的域名部分做一下修改:
1 | # 对应配置示例1 |
1 | # 对应配置示例2 |
这时,我们就是通过新的ssh key
来clone
的代码,在此之后的操作就没有区别了,一切按照之前的使用习惯即可,无论是pull
还是push
代码等操作都使用新的ssh key
来进行了。
这里补充说一个可能跟
ssh key
的关系不大,但是跟多账号有关的问题,是关于commit
代码的账号的设置的。如果默认不处理,提交代码的时候提交信息中的用户和邮箱信息是用户设置的全局账户的信息,当时应该是这样设置的:
1
2 git config --global user.name "You Name"
git config --global user.email name@example.com我们往往是要给不同项目设置不同的提交信息,毕竟你不想把公司的邮箱带到私人项目的提交记录中去。可以通过下边的方式文每个项目单独设置提交账户信息:
1
2
3 cd YourRepoPath
git config user.name "You Name"
git config user.email name@example.com其实很简单,就是去掉
--global
参数。
我的第一个账号是通过默认方式添加的,所以如果没有用自定义域名添加的项目都是使用的默认的密钥即id_rsa
,为了使用方便,可以让自己使用最频繁(或者是项目最多的账户)使用这个默认配置。
如果你有更多的账号,通过上边的方法来生成更多的ssh key
并通过自定义域名的方式对不同账号的项目进行区分即可。
本方法同样适用于gitlab
的多账号情境。