在服务器上生成ssh-key以后,需要把公钥放在github上,但是,这个公钥只能放在一个账户里,如果放在第二个账户里,就会提示这个key已经被用了,这是前提
一个可能的场景是这样的:
你们公司有好几个项目都托管在git上,然后有一台公用的服务器,这时候,你的同事在服务器上搞了一套ssh-key,添加到他的项目里用于ssh验证拉代码了,这时候你也用到这台服务器,然后把公钥往自己的项目里加的时候,发现加不进去了,这时候最暴力的解决方法就是,你重新生成一套加在自己的仓库里,但是这么搞的化,你同事之前添加的那个肯定是不能用了,然后他发现自己的不能用了,上了服务器一看key被改了,他又重新生成一下,然后你又不能用了,如此反复,相爱相杀。
明智的解决方法是这样的,让git去服务器拉代码的时候使用不同的ssh-key就可以了,具体做法如下:
1.生成你自己的ssh-key
ssh-keygen -t rsa -P '' -f ./id_rsa_myself
这个命令会在当前目录生成 id_rsa_myself 和id_rsa_myself.pub 的一对,特别注意的是一定要指定生成文件的存放路径,要么去默认的地方了(~/.ssh/),那就把你同事的给覆盖了
2.这时候就可以添加公钥了,把 id_rsa_myself.pub里的东西添加到github上,这些基本操作就不说具体步骤了
3.把 id_rsa_myself 这个私钥存起来,放哪里都无所谓,也可以直接放在 ~/.ssh/ 目录里,我习惯放在自己家目录下,比如 /home/xiaol/ssh/id_rsa_myself
4.在~/.ssh/目录常见一个config文件,内容如下
cd ~/.ssh/ vi config Host myself HostName bitbucket.org User git PreferredAuthentications publickey IdentityFile /home/xiaol/ssh/id_rsa_myself
5. 这个config和刚才存起来的id_rsa_myself需要权限为600(~/.ssh/系统生成的就是600,改就好了,不改报权限问题)
chmod 600 ~/.ssh/config chmod 600 /home/xiaol/ssh/id_rsa_myself
配置过程就完成了
下面说下使用
配置之前你clone代码:
git clone git@bitbucket.org:xxx/xxx.git
配置之后你clone代码:
git clone git@myself:xxx/xxx.git
至于为什么,你对着新建的那个config文件琢磨琢磨就知道了
这种解决方法不影响你同事,config中没配的时候会用 ~/.ssh/下的文件验证