同時使用GitHub和GitLab

2021-09-26 04:49:11 字數 3053 閱讀 1252

由於公司團隊使用 gitlab 來託管**,同時,個人在 github 上還有一些**倉庫,可公司郵箱與個人郵箱是不同的,由此產生的 ssh key 也是不同的,這就造成了衝突 ,如何在一台機器上面同時使用 github 與 gitlab 的服務?

問題產生場景

無密碼與遠端伺服器互動的秘密 - ssh

如果採用ssh 協議或者git 協議通過終端命令對遠端倉庫進行``push```操作的時候,大概的過程如下:(前提在 github 上已經配置的本機的 ssh public key)

客戶端發起乙個 public key 的認證請求,並傳送rsa key的模數作為識別符號。(關於 rsa key 詳細 維基百科)

服務端檢查是否存在請求帳號的公鑰(linux中儲存在~/.ssh/authorized_keys檔案中),以及其擁有的訪問許可權。

服務端使用對應的公鑰對乙個隨機的256位的字串進行加密,並傳送給客戶端。

客戶端使用私鑰對字串進行解密,並將其結合session id生成乙個md5值傳送給服務端。 結合session id的目的是為了避免攻擊者採用重放攻擊(replay attack)。

服務端採用同樣的方式生成md5值與客戶端返回的md5值進行比較,完成對客戶端的認證。

將push的內容進行加密與服務端傳輸資料。

關於 ssh,請檢視 ssh原理簡介 ,更通俗易懂的文章請檢視阮一峰-ssh原理與運用(一):遠端登入 。

具體場景

無論使用哪種**託管服務商,對於 git 而言,郵箱是識別使用者的唯一手段,所以對於不同的服務商,由於郵箱不同,那麼通過郵件名建立的 ssh key 自然是不同的,這時候在不同的服務商之間進行push命令的時候,git 是不知道使用哪個 ssh key ,自然導致 push 的失敗。場景如下:

在公司團隊使用搭建的 gitlab 服務,提交郵箱[email protected], 個人 github 服務,提交郵箱 [email protected]

有兩個github賬戶,不同的賬戶提交不同的倉庫內容。

解決方案

方案一:同乙個郵箱

由於郵箱是識別的唯一手段,那麼自然的,這兩者採用同乙個郵箱,生成的 public key 也會是同乙個,上傳到 github 或者 gitlab 上面,在 git 的配置中 ,設定好 global 的配置 :git config --global user.name 『ciqing』 && git config --global user.email 『[email protected]』 進行日常的開發是沒有問題的。

實際生活中採用同乙個郵箱的可能性並不是太大,這就引出了方案二

方案二:基於config檔案

所謂的方案二,原理上就是對 ssh 協議配置 config 檔案,對不同的網域名稱採用不同的認證金鑰。

git config 介紹

git有乙個工具被稱為git config,它允許你獲得和設定配置變數;這些變數可以控制git的外觀和操作的各個方面。這些變數可以被儲存在三個不同的位置:

/etc/gitconfig 檔案:包含了適用於系統所有使用者和所有庫的值。如果你傳遞引數選項』–system』給 git config,它將明確的讀和寫這個檔案。

~/.gitconfig 檔案 :具體到你的使用者。你可以通過傳遞 『–global』 選項使git 讀或寫這個特定的檔案。

位於 git 目錄的 config 檔案 (也就是 .git/config) :無論你當前在用的庫是什麼,特定指向該單一的庫。每個級別重寫前乙個級別的值。因此,在 .git/config 中的值覆蓋了在/etc/gitconfig中的同乙個值,可以通過傳遞『–local』選項使git 讀或寫這個特定的檔案。

由於採用了不同的郵箱,對不同的服務商進行提交,所以此時我們經常配置的git config --global就不能常用了,必須在每個倉庫的目錄下進行配置自己的使用者名稱、郵箱。(嫌麻煩?那麼可以這麼解決,由於個人的 github 上有較多的倉庫,而自己團隊的**基本上都是穩定的,有數的幾個,所以在git config --global user.email 『[email protected]』 中全域性配置的是個人郵箱,在團隊的專案單獨配置郵箱)

配置流程

配置 git 使用者名稱、郵箱

git config --global user.name 『ciqing』 && git config --global user.email 『[email protected]

git config --local user.name 『zhangguanjun』 && git config --local user.email 『[email protected]

2.生成 ssh key 上傳到 github/gitlab

ssh key 預設生成後儲存在 ~/.ssh/目錄下 ,預設為 id_rsa 和 id_rsa.pub 兩個檔案,由於我們需要分開配置,所以這麼做:

ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -c "[email protected]"

ssh-keygen -t rsa -c "[email protected]"

命令執行完成後,這時~/.ssh目錄下會多出id_rsa.gitlab和id_rsa.gitlab.pub兩個檔案,id_rsa.gitlab.pub裡儲存的就是我們要使用的key,這個key就是用來上傳到 gitlab上的。

3.配置 config 檔案

在 ~/.ssh目錄下,如果不存在,則新建 touch ~/.ssh/config檔案 ,檔案內容新增如下:

host *intra.***.com

identityfile ~/.ssh/id_rsa.gitlab

user zhangguanjun

hi ciqing! you』ve successfully authenticated, but github does not provide shell access.

➜ ~ ssh -t [email protected]

welcome to gitlab, zhangguanjun!

看到這些welcome 資訊,說明就是 ok的了。

github和gitlab同時使用

由於公司團隊使用 gitlab 來託管 同時,個人在 github 上還有一些 倉庫,可公司郵箱與個人郵箱是不同的,由此產生的 ssh key 也是不同的,這就造成了衝突 如何在一台機器上面同時使用 github 與 gitlab 的服務?如果採用ssh協議或者git 協議通過終端命令對遠端倉庫進行...

同時使用 GitHub 和 GitLab

先說一下寫這篇部落格的緣由,之前自己開發專案的時候都是用 github 來託管 但是實習之後由於公司專案隱私問題,給分配了 gitlab 的使用者名稱和郵箱,當時我就直接在電腦上把使用者名稱和密碼進行了全域性配置,自那以後我在實習之餘做自己的專案時,每次往 github 上提交 都沒有我的 cont...

GitHub和gitlab同時使用

首先先本地申請秘鑰對,為了方便申請在同一目錄下。注意一路enter就行。ssh keygen t rsa c 1112346 qq.com f ssh gitlab id rsa ssh keygen t rsa c 1112346 qq.com f ssh github id rsa然後在各自的 ...