DEV Community


Managing different SSH keys for GitLab and GitHub.

Hridayesh Sharma
Javascript Enginner in ♥️ with UX
Updated on ・2 min read
This article is written assuming that you know how to add ssh keys to your GitHub or GitLab account.
I am talking about just GitHub and GitLab but you can use the same for any cloud git providers.

Many times it happens that when you push to your GitHub repository you have to enter your GitHub password each time.
Frustrating, isn't it?

It used to happen a lot with me until I learned how to use ssh with GitHub.

But now I have got another problem.😣
I have my code on both GitLab and GitHub and now I have to manage multiple ssh keys but I don't know how and I can't even use the same ssh keys for both of them.😥

Let's see how we can do that 🤠

We will go step by step so be patient before we reach the final step.

Step 1. Generate ssh keys.

 $ ssh-keygen -C ""
Enter fullscreen mode Exit fullscreen mode

Now that command generates a pair of public and private keys in your ~/.ssh directory and asks you to provide the name. By default, the name is and id_rsa for public and private keys respectively.

We will generate two pairs of keys each for GitHub and GitLab and name them id_rsa_github and id_rsa_gitlab respectively.

Now your ~/.ssh should look like

|__ id_rsa_gitlab 
|__ id_rsa_github
Enter fullscreen mode Exit fullscreen mode

Step 2. Add the respective public key to the respective provider(GitLab and GitHub)

Step 3. Now comes the important part. How to make ssh-client know which key to use when pushed to GitHub or GitLab? 🤔

So we can have a config file which will help ssh-client to solve the problem.

$ touch ~/.ssh/config # we are creating a config file using touch utility. You can create the same in whatever way you want
Enter fullscreen mode Exit fullscreen mode

Let's see what to put in the config file.

PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github

PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
Enter fullscreen mode Exit fullscreen mode

Here, we are basically telling ssh-client which ssh private key to use based on the provider.
So whenever we try to push to our GitHub repo it will automatically use the GitHub key and we won't have any trouble handling multiple keys. 😎

If you face any problem in implementing this, let me know in the comments. I Will be happy to resolve.

Thanks for reading 😀

Discussion (0)