github是網絡公有代碼倉庫,一般用於私人代碼托管,而gitlab一般是企業搭建的內部代碼倉庫。工作期間,我們都會同時用到這兩個倉庫。可公司郵箱與個人郵箱是不同的,由此產生的 SSH key 也是不同的,這就造成了沖突 。如何在一台機器上面同時使用 Github 與 Gitlab 的服務?
1.生成秘鑰
公司的GitLab生成一個SSH-Key
# 在~/.ssh/目錄會生成gitlab_id-rsa和gitlab_id-rsa.pub私鑰和公鑰。我們將gitlab_id-rsa.pub中的內容粘帖到公司GitLab服務器的SSH-key的配置中。
$ ssh-keygen -t rsa -C "注冊的gitlab郵箱" -f ~/.ssh/gitlab_id-rsa
公網github生成一個SSH-Key
# 在~/.ssh/目錄會生成github_id-rsa和github_id-rsa.pub私鑰和公鑰。我們將github_id-rsa.pub中的內容粘帖到github服務器的SSH-key的配置中。
$ ssh-keygen -t rsa -C "注冊的github郵箱" -f ~/.ssh/github_id-rsa
2.添加config
在
~/.ssh
下添加config配置文件,內容如下:
# github key Host github Port 22 User git HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/github_id-rsa Host gitlab Port 22 User git HostName gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitlab_id-rsa
下面對上述配置文件中使用到的配置字段信息進行簡單解釋:
Host 它涵蓋了下面一個段的配置,我們可以通過他來替代將要連接的服務器地址。 這里可以使用任意字段或通配符。 當ssh的時候如果服務器地址能匹配上這里Host指定的值,則Host下面指定的HostName將被作為最終的服務器地址使用,並且將使用該Host字段下面配置的所有自定義配置來覆蓋默認的`/etc/ssh/ssh_config`配置信息。 Port 自定義的端口。默認為22,可不配置 User 自定義的用戶名,默認為git,可不配置 HostName 真正連接的服務器地址 PreferredAuthentications 指定優先使用哪種方式驗證,支持密碼和秘鑰驗證方式 IdentityFile 指定本次連接使用的密鑰文件
3.配置倉庫
假設gitlab與jgithub的工作目錄分別如下所示:
github工作倉庫:~/workspace/github
gitlab工作倉庫:~/workspace/gitlab
則配置如下:
#gitlab cd ~/workspace/gitlab git init git config --global user.name 'gitlab' git config --global user.email 'gitlab@company.com' #github cd ~/workspace/github git init git config --local user.name 'personal' git config --local user.email 'personal@163.com'
4.測試
# 測試github $ ssh -T git@github.com # 測試gitlab $ ssh -T git@gitlab.com