I work with git repositories from multiple sources - GitHub, GitLab, and Enterprise GitHub instance. I have a separate SSH keys for each of them and further, I have to keep track of other SSH keys that I use for accessing servers and other resources.
Recently, I got a new Windows machine from work and it started complaining that it couldn't use the right SSH key for my Enterprise GitHub repositories. No matter what I tried, it failed to authenticate correctly.
While, searching for a solution, I came across two ways to solve this:
Git config
Git provides a config parameter (git >v2.10
) that can override the ssh
command that git
uses. So, piggybacking on this command, we can pass in the identity file information to it.
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_github -F /dev/null"
What this enables is the ability to set a different SSH key for each repository as needed. Further, this method works across platforms.
Environment variable
Another method is to use the GIT_SSH_COMMAND
(git >v2.30
) environment variable to do the same. You can add an alias for git
based on the site.
alias github='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_github -F /dev/null" git'
And then use github clone repo_url
instead of git clone repo_url
.
I prefer using the git config method as I don't have to worry about which alias to use in which repository.