情況

我有私人的 GitHub 帳號,為了方便自己跟公司管理起見,我用公司的信箱申請另一個 GitHub 帳號來存取公司的 repo。

問題

同一台電腦的一組 SSH Key 只能綁定到一個 GitHub 帳號,無法用同一組 SSH key 綁定到多組帳號,所以我無法把綁到私人帳號的 SSH Key 再綁到公司帳號。

解法

我要在同一台電腦建立不同的 SSH Key 對應到不同的 GitHub 帳號,並且在執行 git 操作時,系統會自動選擇對應的 SSH key。

1. 建立 SSH key

可以參考 GitHub 的說明文件 建立多組 SSH Key,大致的步驟如下:

ssh-keygen -t ed25519 -C "your.name@personal.com"
ssh-keygen -t ed25519 -C "your.name@company.com"

建立的過程會問你要儲存的檔名,建議可以使用 id_ed25519_personalid_ed25519_company 之類好辨認的名字。

2. 把 key 加入 ssh-agent

首先要執行 eval "$(ssh-agent -s)" 啟動 ssh-agent,然後執行以下命令把 key 加到 ssh-agent。

ssh-add id_ed25519_personal
ssh-add id_ed25519_company

我們可以執行 ssh-add -l 檢查看看是不是有正確加入了。

3. 把 SSH key 加到 GitHub 帳號

參考 GitHub 說明文件 把不同的 SSH Key 加到各自對應的 GitHub 帳號。

4. 設定 git config 指定對應的 user name & email

在我們打算存放公司 repo 的目錄下,修改 .git/config 檔,加入以下的資訊。

[user]
    name = Your Name
    email = your.name@company.com

5. 重開機之後自動把 key 加入 ssh-agent

為了避免每次重開機都要手動把 key 加入 ssh-agent,我們還需要一些設定。首先要修改 ~/.ssh/config 檔,沒有這個檔就手動建立一個。

# Default github account
Host github.com
  HostName github.com
  AddKeysToAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_ed25519_personal

# Company github account
Host github.com-company
  HostName github.com
  AddKeysToAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_ed25519_company

然後在家目錄底下的 ~/.gitconfig 檔加入以下設定。

[url "git@github.com-company:company_github_account/"]
    insteadOf = git@github.com:company_github_account/

參考資料