背景
公司之前的版本控制工具一直用的svn
,最近開發的新項目,代碼准備改換到了gitlab
上進行管理。而我自己平時寫的一些代碼是放在github
上進行托管的,這二者都是基於git
的開源分布式版本控制系統,在本地可以通過ssh進行遠程登錄驗證和數據傳輸(關於ssh的詳細介紹可以參考這篇博文:http://blog.csdn.net/macrossdzh/article/details/5691924
)。
具體操作是利用ssh在本地生成一對公私秘鑰(keys),然后將公鑰添加到注冊的gitlab/github賬戶配置ssh key的地方即可。默認情況下本地生成的秘鑰位於/Users/mac用戶名/.ssh/
(mac平台,本文針對os x系統介紹)。
But,問題來了:默認情況下每個賬戶生成的秘鑰位置和名稱都是相同的,這樣后生成的秘鑰就會覆蓋前面的秘鑰導致其失效。解決的辦法就是在生成后一個秘鑰的時候對其重新命名,以避免沖突,同時將不同的秘鑰配置到相對應的Host上面,這樣在訪問不同的遠程倉庫時調用不同的key,沖突也就解決了。具體操作如下:
生成gitlab秘鑰
默認你已經注冊了gitlab/github賬戶,以我自己為例,公司項目用的gitlab,自己代碼托管在github。先進行公司賬號的設置:
本地生成ssh keys命令:ssh-keygen -t rsa -C "注冊的gitlab郵箱"
,生成的公司秘鑰會提示是否需要重命名,公司gitlab的秘鑰我們就使用默認名稱,直接回車跳過,另外還會提示你設置密碼,設置密碼的話后續登陸會比較麻煩,也直接跳過。成功后大概是這樣的:
查看 .ssh/目錄,可以看到公私秘鑰已經生成,名稱分別為id_rsa.pub、id_rsa
執行命令查看公鑰內容:cat ~/.ssh/id_rsa.pub
,或者直接用nano
編輯期打開id_rsa.pub
。公鑰大概是這個樣子:
將這部分代碼添加到到gitlab
賬戶的的SSH Keys
中即可。
生成github秘鑰
終端執行命令:ssh-keygen -t rsa -C "注冊的github郵箱"
,這次一定要注意,對生成定的秘鑰進行重命名,這里暫且重命名為id_rsa_home
,同樣不設置密碼。可以看到生成的公私秘鑰已經分別被重命名為id_rsa_home.pub
和id_rsa_home
。
可以查看公鑰里面的內容:cat ~/.ssh/id_rsa_home.pub
不要忘記將其拷到github的SSH Keys里~
gitlab和github的秘鑰是分開生成了,可怎么讓這兩份秘鑰分別對應到相應的遠程倉庫呢?就是讓id_rsa.pub
認得gitlab
,讓id_rsa_home.pub
認得github
。既然不能自動識別,那就只好手動設置了:
配置config
在.ssh/目錄下新建config文件:touch config
,通過nano編輯器進行如下配置:
其中Host
對應的名稱是一個別名,命名可以隨意,用來進行遠程連接,當然使用真實的主機名稱也是可以的。HostName
和IdentityFile
就是各自主機名稱以及對應的秘鑰文件了~
這樣配置之后,兩份秘鑰也就對應到各自相應的倉庫上了。通過設置別名,也就可以設置任意多的賬戶了~
最后利用別名檢測下配置是否成功~
檢測
檢測gitlab
連接,如果提示是否建立連接,直接yes就行:
檢測github
連接:
不報錯的話,就說明設置成功了!
本地只配置了IdentityFile 就可以了