Git - 在工作與私人專案中來回切換 SSH

  • 140
  • 0
  • Git
  • 2023-07-09

將 SSH 分不同的帳號配置!

在悠閒的假日,最快樂的便是探索新技能~

 

 

前言

筆者 MacBook 拿來混雜工作與私人開發用,

因此經常有不同的 Repository 須對應不同的 Github Account。

 

如果沒設定好 SSH,就會被終端機嗆:

ERROR: Permission to explooosion/nuxt3-boilerplate.git denied to robbywu-work.
fatal: Could not read from remote repository.

 

每次在新環境都需要重新配置,

也…時常遺忘作法,所以這次將流程紀錄起來!

 

注意事項

  1. 文章筆者分為 PersonalWork 的情境建置
  2. 筆者開發環境使用 macOS

 

 

0.環境檢查

可以先檢查自己電腦是否已經存在一些 git 使用的 SSH,

~/.ssh/目錄下檢查是否存在以下兩個檔案(類似):

  • id_rsa(私鑰)
  • id_rsa.pub(公鑰)

 

如果已經存在,可以選擇刪除重新來過,

或者跳過 1.建置金鑰,直接到 2.SSH 設定檔

 

 

1.建置金鑰

1.1 私人用

新增 SSH,輸入指令。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 請將your_email@example.com 改為自己的私人電子郵件

 

輸入上述指令建立檔案與名稱時,會提示你儲存檔案。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/robbymac/.ssh/id_rsa): id_personal
  • 可設定自己喜歡的名字。例如:id_personal

 

添加 SSH 金鑰到 SSH 代理,輸入指令。

ssh-add ~/.ssh/id_personal
  • 請指向自己的檔案路徑與名稱

 

複製公鑰,輸入指令。

稍後我們便可以貼到 Github - Settings - SSH keys 上。

pbcopy < ~/.ssh/id_personal.pub
  • 請記得要複製公鑰.pub
  • 建立 SSH 時會自動產生私鑰匙與公鑰,公鑰預設檔名為[私鑰].pub

 

在 GitHub 上添加 SSH 金鑰,選擇 New SSH key。

 

將剛剛透過 pbcopy 指令複製的公鑰,貼到 key,並適當取一個你好識別裝置的金鑰。

  • Key type不需要變更,預設Authentication Key

 

測試 SSH 連接,輸入指令。

ssh -T git@github.com

 

 

1.2 工作用

參照 「1.1 私人專案金鑰」,建立一組金鑰 id_workid_work.pub

步驟很簡單,不是筆者懶了不寫文章。

 

2. SSH 設定檔

接著我們要在這個檔案,配置 SSH 用於連接遠端主機的相關設定。

請到 ~/.ssh 目錄建立新檔案,內容如下:

 

可使用 vi 或者 nano 編輯,

或者用 Finder 打開,直接建立檔案,輸入指令。

open ~/.ssh

 

新增 SSH 設定檔案,輸入指令。

touch config

 

SSH 設定檔案內容,輸入內容。

Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_person

Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_work
  • Host:可以自己設定方便識別的名稱
  • HostName:根據你的主機配置,由於 Repository 建立在 Github,因此設定 github.com 即可!
  • IdentityFile:設定你的 SSH 來源,請依據你的私人與工作用指定 私鑰

 

以上流程就完成建置囉!後續不再需要改動。

 

 

3. 設定 Repository

以下有兩種情境,請根據所需擇一配置。

 

3.1 新專案 Clone 指定 SSH Config Host

在 Git 的預設設置中,當使用 SSH 協議與遠端版本控制倉庫進行通信時,它會自動讀取 ~/.ssh/config 文件中的主機配置。

這些主機配置包含了與遠端主機的連接參數,例如主機名稱、用戶名和身份證書文件等。

由於我們環境存在多個遠端主機,因此每次 Clone 需要指派對應的 Host。

 

使用 SSH 協議進行操作時忽略 ~/.ssh/config 文件中的任何主機配置。

設定環境變數,輸入指令。

export GIT_SSH_COMMAND="ssh -F /dev/null"

 

接著 Clone 你的新專案。

git clone ssh://github-personal:<使用者名稱>/<儲存庫名稱>.git

 

 

3.2 將既有專案添加指定 SSH Config

每次你有新專案,都需要設定所使用的 SSH 帳號。

請先移動到你的專案目錄,輸入指令。

git remote set-url origin github-personal:<使用者名稱>/<儲存庫名稱>.git
  • github-personal:根據你的專案用途,輸入 SSH Config 配置的 Host 名稱。

 

檢查專案的 Remote,輸入指令。可以發現 remote-url 增加了 Host 名稱。

git remote -v

 

 

好耶!恭喜你設置完畢。

只要要記得,這兩種的專案配置就行囉!

 

或者跟筆者一樣,重新回顧這篇文章!!

 

有勘誤之處,不吝指教。ob'_'ov