之前有寫過篇類似的([ Git ] 用 Terminal 管理多個帳號、匯入 local repo 至 Github repo),但後來自己要再執行時,發現有些不足跟不清楚的地方,所以又寫了一篇來紀錄。這邊以 GitLab 為例,紀錄如何從 GitLab 中 clone repo 到 local。

大致分成以下四個部分進行:

  1. 設定 SSH Key
  2. 設定 .ssh/config 對應的資訊
  3. GitLab 綁定 SSH Key
  4. 用 SSH Key clone 專案

1. 設定 SSH Key

$ ssh-keygen -t rsa

接著會顯示以下內容:
Generating public/private rsa key pair.
下面這行係指要將 keys 存在哪:定義 ssh key 儲存位置(這邊命名為 id_rsa_gitlab)
Enter file in which to save the key (/Users/<user>/.ssh/id_rsa): /Users/nini-chang/.ssh/id_rsa_gitlab
下面這行是問,開啟此 ssh key 時是否要輸入通行密碼
Enter passphrase (empty for no passphrase): (如果沒有要設定,可以直接 enter 跳到下一行)
Enter same passphrase again: (這邊是再次確認通行碼,沒有一樣 enter 跳過)

如果顯示以下內容,就表示成功生成 ssh keys 囉!通常會有私鑰和公鑰,深入瞭解可以參考:SSH 原理與運用-遠程登錄vim 指令
Your identification has been saved in /Users/nini-chang/.ssh/id_rsa_gitlab.
Your public key has been saved in /Users/nini-chang/.ssh/id_rsa_gitlab.pub.
以下都是私密資訊(包含一串字串跟圖形)
The key fingerprint is:
SHA25-xxxxxxxxxxxxxxxxxxxxxxxx
The key’s randomart image is:
+—[RSA 3072]—-+
………
+—-[SHA256]—–+

2. 設定 .ssh/config 對應的資訊

打開 ~/.ssh/config 編輯

$ vim ~/.ssh/config

-- 也可以查看資料夾中是否有剛剛產生的 ssh key (id_rsa_gitlab & id_rsa_gitlab.pub)
$ ls

開啟後輸入以下內容,對應至 gitlab 帳號,詳細內容可以參考 SSH Config 那些你所知道和不知道的事

#GitLab - personal
#domain 的別名,可以自己取
Host gitlab.com-nini
  #domain name
  HostName gitlab.com
  #gitlab's username
  User <改成你的 GitLab's username>
  #通常會用 publickey
  PreferredAuthentications publickey
  #添加到 ssh-agent 將私鑰和密碼交给他管理、進行身份認證
  AddKeysToAgent yes
  UseKeychain yes
  #要綁定的 ssh key
  IdentityFile ~/.ssh/id_rsa_gitlab

3. GitLab 綁定 SSH Key

先開啟剛剛產生的 ssh key (public key),我們剛剛在 config 檔中有寫 PreferredAuthentications publickey,表示我們希望透過 publickey 認證,這邊就是開啟 id_rsa_gitlab.pub。接著你會看到 ssh-rsa 開頭的一大串字串,將檔案中所有字串複製起來

$ vim ~/.ssh/id_rsa_gitlab.pub
id_rsa_gitlab.pub

開啟 GitLab,點開左邊側欄中的 SSH Keys,將剛剛在 id_rsa_gitlab.pub 複製的字串貼上去,並輸入標題和失效期限

GitLab SSH Keys 設定
新增 SSH Key 後會跳轉到以下畫面

到這邊就完成 GitLab 綁定對應的 SSH key 囉!

4. 用 SSH Key clone 專案

開啟要 clone 的專案,複製 clone with SSH 中的網址

-- 灰色的字串,就是寫在 config 中的 Host
$ git clone git@gitlab.com-nini:nini-chang/myProject.git

這樣就完成囉!!

參考資料