Public key authentication for multiple private Github repositories
without using ssh-agent
Authenticating with Github using a single public key for all private repositories is straightforward enough: just follow Github's guide to authenticating with SSH and configure your
Host github.com Hostname github.com User git IdentityFile ~/.ssh/your_private_key
But things get more tricky if you don't want to use the same public key for all your private repositories, but instead want to use specific deploy keys for one or more of them. This can be done relatively easily by taking advantage of the
Host field in
The trick here is to configure each Github repository to use a different hostname. Rather than
github.com/username/repo_name, set it to
repo_name.github.com, or something. What's important is that it doesn't clash with any existing domain you might want to access.
Set the hostname in your
.git/config on each repository:
[remote "origin"] url = "ssh://git@repo_name1.username/alice/repo1.git"
[remote "origin"] url = "ssh://git@repo_name2.username/alice/repo1.git"
Then, in your
~/.ssh/config, map your made-up hostname to an actual host, with an actual identity file:
Host repo_name1.username HostName github.com User git IdentityFile ~/.ssh/your_1st_public_key Host repo_name2.username HostName github.com User git IdentityFile ~/.ssh/your_2nd_public_key