Byte Ebi's Logo

Byte Ebi 🍤

每天一小口,蝦米變鯨魚

在同一台電腦設定多組 GitHub 帳號

設定多組 Github 帳號,並使用 ssh 連線

Ray

因為遠端工作的關係,我要在自己的電腦上設定公司的 GitHub 帳號
然而 GitHub 是不會讓你把同一組 SSH Key 設定給不同的帳號的
所以無法把私人帳號的 SSH Key 設定到公司提供的 GitHub 帳號上

目標:在一台電腦上設定兩組 SSH Key,並且在執行git指令時自動選擇對應的 SSH Key

參考資料:Generating a new SSH key and adding it to the ssh-agent

1. 使用指令建立新的 ssh key

ssh-keygen -t rsa -C '{[email protected]}' -f ~/.ssh/id_rsa_company

產生出來的 ssh key 會存在以下路徑

  • Mac:/Users/username/.ssh
  • Windows:C:\Users\username\.ssh

此時先複製產生出來的 id_rsa.pub 內容

2. 在公司 github 帳號下新增 SSH key

首先進到帳號的 SSH keys 管理頁面
並按下畫面右方的New SSH key按鈕

add ssh key

名稱選自己好識別的,內容貼上剛剛產生的 id_rsa.pub 內容

3. ssh config 設定

3-1. 清除已設定的全部金鑰

這個指令只會刪除設定相關,並不會把金鑰檔案刪除!

ssh-add -D

這邊嘗試好幾次,金鑰越來越亂,最後只能放棄重來
索性再往下操作前都清除掉原有的金鑰設定
反正重新加入很簡單,而且在接下來的流程中也會新增

3.2. 查看當前已經產生哪些金鑰

ls .ssh

3.3. 重新加入金鑰

在前面已經產生一組新的 ssh keyid_rsa_company
而電腦原有的個人金鑰叫做id_rsa

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_company

可以使用指令查看是否成功加入

ssh-add -l

3.4. 修改 ssh 的 config 設定

首先我們要確定~/.ssh/config檔案存在,如果不存在則建立

cd ~/.ssh/
touch config
open config

開啟config檔案後,將內容修改成如下:

# Personal GitHub account

Host github.com
    HostName github.com
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

# Work GitHub account

Host github.com-company
    HostName github.com
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_rsa_company
    IdentitiesOnly yes

我們設定了兩組 ssh key,一組用於個人帳號,一組用於公司帳號

  • Host:代表呼叫的主機,可以是 IP 或是域名
  • IdentityFile: 代表要使用的 ssh key 檔案
  • AddKeysToAgent: 表示是否要將 ssh key 加入到 ssh-agent 中
  • UseKeychain: 表示是否要使用 ssh-keychain 來管理 ssh key

4. 測試連線

如果成功的話應該會分別顯示不同帳號的歡迎訊息

ssh test

5. 從遠端 clone 到本機

原本的個人帳號不需要做任何調整
若是要 clone 公司帳號的專案,則要將指令內的 host 改為 config 中的公司帳號 Host
後面的專案名稱什麼的不需要更動

git clone [email protected]:{company/repository.git}

範例中就是把 GitHub 預設的 github.com 換成 github.com-company
如此一來在下指令時就會根據 Host 自動識別到對應的 ssh key 來進行連線!

要注意的是有些 Git 的 GUI 軟體不支援使用多組 ssh key 連線,可能會出現錯誤訊息
甚至是把你預設的 ssh key 也變成公司那組
下連線測試指令,不知道為什麼就一直連到公司帳號,而且還成功連線…

具體原因沒有去查,索性直接清除已設定的全部金鑰

比較建議的做法是,依然可以使用慣用的 GUI 進行本機的 Git 操作
像是commit或是看線圖之類

而 push, pull 之類會和進行遠端操作的指令就直接開 terminal 執行吧

6. 調整既專案

如果是已經 clone 下來的專案的話,打開專案資料夾內/.git/config檔案
並修改[remote "origin"]下方的 url 為公司帳號的 url

[remote "origin"]
	url = [email protected]:company/repository.git
	fetch = +refs/heads/*:refs/remotes/origin/*

如果 GUI 支援編輯遠端的 url 的話,直接在 GUI 上修改更好

以上就是這次的踩坑經驗了!
之前一直都用公司配發的電腦開發,很久沒遇到這種問題
但是其實以前做過類似的設定,當時覺得這不是會頻繁出現問題就沒有寫下來
導致這次多花時間研究了一陣子,就是不頻繁出現才應該記下來
否則再次出現又要從頭摸索

最新文章

Category

Tag