How to use different ssh credentials for GitHub for the same Linux user

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 "" -f another-identity

Where `another identity is a file name where the new key is saved.

Testing the new key

Add the to your GitHub account, and test it with:

$ ssh -i another-identity -T

Where -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                
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:

  PreferredAuthentications publickey
  IdentityFile ~/.ssh/another-identity

Now, when you can test if this piece of configuration works:

$ ssh -T
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    

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 with

git clone
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.