在服務器上生成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/下的文件驗證