github 多個帳戶 SSH登入
GitHub 多帳號 SSH 切換
TL;DR同一台機器要用 個人 + 公司 兩個 GitHub 帳號 → 用 SSH config 設不同 Host alias,clone / push 用對應的 host name。每個 repo 也要設專案級 user.name / email,避免 commit 帳號錯誤。
完整設定步驟
1. 產生兩組 SSH Key
# 個人帳戶
ssh-keygen -t ed25519 -C "personal@email.com" -f ~/.ssh/id_ed25519_personal
# 工作帳戶
ssh-keygen -t ed25519 -C "work@email.com" -f ~/.ssh/id_ed25519_work
-t ed25519 比 RSA 短、安全 — 2026 年首選 ed25519。
2. 設定 SSH config
# ~/.ssh/config
# 個人 GitHub
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# 工作 GitHub
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Host 是別名(任你定),HostName 是真實 GitHub。IdentitiesOnly yes== 強制只用指定的 key,別讓 ssh-agent 嘗試其他 key。
3. 把公鑰加到 GitHub
# 複製公鑰
cat ~/.ssh/id_ed25519_personal.pub
# 貼到個人帳號:Settings → SSH and GPG keys → New SSH key
cat ~/.ssh/id_ed25519_work.pub
# 貼到工作帳號:同上
4. 測試連線
ssh -T git@github.com-personal
# Hi Bobo100! You've successfully authenticated.
ssh -T git@github.com-work
# Hi work-user! You've successfully authenticated.
看到正確的 username 才算成功。
5. Clone 時用對應 Host
# 個人
git clone git@github.com-personal:Bobo100/cra-template-bobonext.js.git
# 工作
git clone git@github.com-work:company-org/secret-project.git
注意:不是 github.com,是你定義的 github.com-personal / github.com-work。
改既有 repo 的 remote
如果原本是 github.com 的 origin,要改成新的 host alias:
# 看現在 remote
git remote -v
# origin git@github.com:Bobo100/repo.git
# 改成 personal host
git remote set-url origin git@github.com-personal:Bobo100/cra-template-bobonext.js.git
# 確認
git remote -v
# origin git@github.com-personal:Bobo100/cra-template-bobonext.js.git
設定 repo 級的 user.name / email
SSH key 解決連線,user.name / email 解決 commit 顯示:
# 進入 repo
cd ~/Projects/MyRepo
# 設定該 repo 用個人 user
git config user.name "Bobo100"
git config user.email "w150lione@gmail.com"
# 工作 repo 設成工作 user
cd ~/Work/CompanyRepo
git config user.name "Bobo (Work)"
git config user.email "bobo@company.com"
沒設好的話 commit author 會用全域 user(可能跟 SSH key 對不上),GitHub UI 看 commit 會顯示「錯的人」。
進階:用 includeIf 自動切換
2.13+ Git 支援 includeIf ,根據資料夾路徑自動套不同 config:
# ~/.gitconfig
[user]
name = Bobo100
email = w150lione@gmail.com
[includeIf "gitdir:~/Work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/Personal/"]
path = ~/.gitconfig-personal
# ~/.gitconfig-work
[user]
name = Bobo (Work)
email = bobo@company.com
[core]
sshCommand = "ssh -i ~/.ssh/id_ed25519_work"
# ~/.gitconfig-personal
[user]
name = Bobo100
email = w150lione@gmail.com
[core]
sshCommand = "ssh -i ~/.ssh/id_ed25519_personal"
以後 clone 到 ~/Work/ 自動用工作帳號,不用每個 repo 手動設。
ssh-agent 管 key(避免每次輸密碼)
# 啟動 agent
eval "$(ssh-agent -s)"
# 加 key 進 agent
ssh-add ~/.ssh/id_ed25519_personal
ssh-add ~/.ssh/id_ed25519_work
# 查現在管什麼
ssh-add -l
Mac 可以加 keychain:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_personal
Windows 用 GitHub for Windows 或 PuTTY,內建 agent。
常見地雷
1. 弄混 Host aliasgit@github.com-personal:user/repo.git 跟 git@github.com:user/repo.git 是兩件事。後者用預設 SSH key(可能不是你想的那個)。 看 .git/config 確認 url 是用哪個 host。
2. 公鑰 vs 私鑰貼錯上 GitHub 的是 .pub(公鑰),不是私鑰。私鑰是 絕不能外洩 的東西,洩了等於別人能裝你登入。
3. 忘記設 repo userSSH 用 personal key,但 commit 顯示是 default user → GitHub 看 commit 是「unknown contributor」(綠點不會在 personal account 算)。
同步 GPG signing key進階:把 commit 都 sign 上,Verified badge 看起來專業。git config --global commit.gpgsign true git config --global user.signingkey YOUR_KEY_ID