# 前言

相信在同一機器上部署多個應用並不是什麼罕見的需求,特別是像我這樣很小的個人網站來說更是如此。但在我部署子站的時候發現一個問題,那就是 Github 並不允許多個倉庫使用相同的 Deploy Key。如果你嘗試這樣做的話,會得到如下提示:
Key is already in use

先把①全部執行完再執行②

# 建立 ssh keygen

首先,在生成 SSH Key 的時候,需要添加 -f 參數,指定不同於默認的文件名(id_rsa),以免無意中覆蓋:

在回應內容,我們都不設定任何密碼,直接按 enter 或 y

命令行提示符
ssh-keygen -t rsa -f ~/.ssh/repo1_rsa -C "Github email"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/使用者名稱/.ssh/id_rsa):
/Users/使用者名稱/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/使用者名稱/.ssh/id_rsa.
Your public key has been saved in /Users/使用者名稱/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3Cor2z.............d3h31 your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|=.. .o           |
|...
|+X+*..           |
+----[SHA256]-----+
li
命令行提示符
ssh-keygen -t rsa -f ~/.ssh/repo2_rsa -C "Github email"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/使用者名稱/.ssh/id_rsa):
/Users/使用者名稱/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/使用者名稱/.ssh/id_rsa.
Your public key has been saved in /Users/使用者名稱/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3Cor2z.............d3h31 your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|=.. .o           |
|...
|+X+*..           |
+----[SHA256]-----+
li

# 將 SSH Key 加到 ssh-agent

命令行提示符
eval "$(ssh-agent -s)"
命令行提示符
eval "$(ssh-agent -s)"

# 將 SSH Private Key 加到 ssh-agent

命令行提示符
ssh-add ~/.ssh/repo1_rsa
命令行提示符
ssh-add ~/.ssh/repo2_rsa

# 複製 SSH Key

命令行提示符
vim ~/.ssh/repo1_rsa.pub
命令行提示符
vim ~/.ssh/repo2_rsa.pub

# 前往 Github Deploy Key 區

  1. 前往 Repository 進入專案後,點擊 settings

  2. 點選左區選單 Deploy Key ,接著按右邊上角的 Add deploy key

  3. 貼上剛剛複製的 SSH Key 以及輸入標題,儲存
    Github Deploy Key 區

# 編輯 ~/.ssh/config 文件以指定不同的登入配置

命令行提示符
vim ~/.ssh/config
a
Host repo1.github.com
Hostname github.com 
User git         
IdentityFile ~/.ssh/repo1_rsa                                                                                        
IdentitiesOnly yes
          
Host repo2.github.com
Hostname github.com
User git         
IdentityFile ~/.ssh/repo2_rsa                                                                                        
IdentitiesOnly yes
:wq

這裡的要點是,用不同的 Host 代替默認的 git 協議地址(github.com)。

然後,你可以按照配置,把生成的 SSH Key 配置到不同的 Github 倉庫。

# 改 SSH URL

命令行提示符
git@repo1.github.com:user/[project].git
命令行提示符
git@repo2.github.com:user/[project].git

對於已經 clone 的項目,建議刪掉.git 資料夾重新 pull ㄅ