指定特定的 ssh key 解決想要在共享環境中存取 github private repo。
前言、情境
很久之前有寫過一篇關於 git 使用 ssh key 的文章 107.03.02 git push 免帳號密碼 | ssh key。隨著時間過去,使用情況可能變得複雜,例如,一個團隊共享執行環境。
這篇使用的方式能夠解決: 無法使用 github tokens 去 clone 是 collaborator 但不是自己的 private repo (Cloning private repositories that you don’t own is not possible using GitHub tokens.)。
首先,如果是要開發,建議是使用 fork 的方式複製一份到自己的帳號底下,這樣就可以使用 tokens 來 clone (不需要往下看)。但如果是要下載別人帳號底下的程式碼,那麼目前只能使用 ssh key 解決。使用的是個人環境有自己的 ssh key 也可以直接下載 (不需要往下看)。情境比較特殊些,這裡是使用 git clone, push 時指定特定的 ssh key 解決,但或許有其他方法。
產生 ssh key
要再共享的環境中產生 key 時,強烈建議使用 passphrase,讓使用 key 時需要額外的密碼。產生後一樣按照 107.03.02 git push 免帳號密碼 | ssh key 的方法把 key 放到 github 上。
ssh-keygen -t rsa -f ~/.ssh/KEY_NAME
# It is recommended that you set a passphrase.
# Next, add the public key to your GitHub settings.
Git
- requirements: Git 2.3.0
git clone with specific ssh key
GIT_SSH_COMMAND='ssh -i ~/.ssh/KEY_NAME -o IdentitiesOnly=yes' git clone git@github.com:USERNAME/REPO.git
git push with specific ssh key
GIT_SSH_COMMAND='ssh -i ~/.ssh/KEY_NAME -o IdentitiesOnly=yes' git push