客製化 git 使用的 SSH Key

寫完一個指令切換預設使用的 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 fetchgit 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:

參考資料