If you have multiple GitHub users, setting up ssh key can become tricky. You cannot add the same, default key to 2 users. You need to set up your machine to use different keys depending on which identity you want to use. This article will show how to set up ssh config to support additional ssh-key, along with your default key.
Default key set up
I assume you already have one ssh-key set up, it's working OK, and it's somehow similar to what they describe in the doc. This part of the setup will be left unchanged - you will be able to keep on using the standard domain with your standard key.
Additional key set up
First, you need to generate an additional key and make sure it's saved under another name. You can follow this documentation:
$ ssh-keygen -t ed25519 -C "firstname.lastname@example.org" -f another-identity
Where `another identity is a file name where the new key is saved.
Testing the new key
another-identity.pub to your GitHub account, and test it with:
$ ssh -i another-identity -T email@example.com
-i another-identity makes ssh use the non-default key for connection. If all goes well, you will see your other profile name in the GitHub response:
$ ssh -i another-identity -T firstname.lastname@example.org Hi marcin-test! You've successfully authenticated, but GitHub does not provide shell access.
Configuration for git CLI
With the new key in place, you can create
.ssh/config and set there:
Host another-indenity.github.com Hostname github.com PreferredAuthentications publickey IdentityFile ~/.ssh/another-identity
Now, when you can test if this piece of configuration works:
$ ssh -T email@example.com Hi marcin-test! You've successfully authenticated, but GitHub does not provide shell access.
Checking out with new identity
Now, let's test our access to a private repository available only on our second user:
$ git clone firstname.lastname@example.org:marcin-test/test.git Cloning into 'test'... ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Normal clone fails, but if we replace
git clone email@example.com:marcin-test/test.git Cloning into 'test'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.
Now everything works as expected.
In this article, we have seen how to set up 2 identities for your GitHub projects.