寫完一個指令切換預設使用的 SSH Key這篇之後,又思考了一下有沒有其他方式來解決這個同個電腦中使用兩個 github 帳號的問題,畢竟那篇是採用 ssh-agent level 來解決,但其實搞不好也可以直接從 git 的 config 下手,因此這次重新用更多關鍵字去調查解法,發現 git 其實也支援客製化 ssh 指令。
解法一:環境變數 GIT_SSH_COMMAND
設定這個環境變數即可改變 git 使用的 ssh 指令。
可以透過 export
對當下的 shell 做一次性修改(也能達成一指令切換):
export GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/my_rsa"
或是直接搭配 git 指令使用:
GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/my_rsa" git push
-o IdentitiesOnly=yes
: 防止 -i
的 Key 被 SSH Agent 取代
我自己也無法 100% 確定什麼時候 -i
Options 會無效,不過知道原因是因為即便是加了 -i
指定 key file,還是會參照到 ssh agent 現存的所有 keys。因此還是加上 -o IdentitiesOnly=yes
保險。
解法二:更改 Git Configuration 的 core.sshCommand
根據文件,會影響到 git fetch
和 git push
時使用的 ssh 指令。
因此可以在已經 clone 好的 repo 內下:
git config --local core.sshCommand "ssh -o IdentitiesOnly=yes -i ~/.ssh/my_rsa"
解法三:直接切換 SSH Agent
就是我原本的解法,詳見這篇:
小結
最後採用解法二 + 三,三用來切換 default 的 SSH Key 用於 clone 自己的 private repo 時使用,之後就在 repo 內直接設定 core.sshCommand
就不用每次再重新切換 ssh key 了。
順便附上我準備的設定 local gitconfig 的 script:
參考資料
本文原創部分採用
創用 CC 姓名標示-非商業性-禁止改作 4.0 國際授權條款
授權。