Menu ↓

Multiple SSH Keys

Did you know that you could generate many ssh keys on your machine?

But, why do I need more than one ssh key?

I need many ssh keys for my personal and non-personal GitHub accounts. Well… non-personal is anything that is not using my personal account

If you have the same needs like me, but don't know how to achieve that. Don't worry, let me guide you step by step

Before we start. Let me show what's my machine and the SSH version that I used.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 Mar 2022

Now, let's start the walkthrough!

Generate SSH Key

The very first step is, of course, generating the SSH key.

$ ssh-keygen -t ed25519 -C "your_email@example.com"

Note: substitue the email with your associated email with GitHub

ATTENTION!!

Normally, I would keep pressing Enter to continue as the SSH key would be stored in the default file the prompt has assigned (id_rsa). However, since I need many SSH keys, I need to name the keys differently. This is to distinguish which one is which and also for later purposes.

Few things here:

  • I need to type the whole pathname to where I want to save it and make sure to name the keys differently.
  • It is totally up to you to fill in the passphrase, but I'm choosing the empty passphrase.
$ ssh-keygen -t ed25519 -C "mail@swardana.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/swardana/.ssh/id_ed25519): /home/swardana/.ssh/id_rsa_personal
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/swardana/.ssh/id_rsa_personal
Your public key has been saved in /home/swardana/.ssh/id_rsa_personal.pub
The key fingerprint is:
SHA256:vlvKRXyDXG4W2NcZBMUrV+W08pOs8EjNII179mkdBYs mail@swardana.com
The key's randomart image is:
+--[ED25519 256]--+
|             .*++|
|          oo . B=|
|         o.oE.oo*|
|         oo++++oo|
|        S.==*oo* |
|       . .++=.+ o|
|        . o. * . |
|       . =  .    |
|        =.       |
+----[SHA256]-----+

Adding the SSH to ssh-agent

The ssh-agent is a program by OpenSSH that stores private keys for SSH authentication. Just imagine that ssh-agent is like a single sign-on (SSO) service for your system. It allows you to authenticate an SSH connection once, then use that authentication across multiple programs.

$ eval $(ssh-agent -s)
Agent pid 85101

$ ssh-add .ssh/id_rsa_personal
Identity added: .ssh/id_rsa_personal (mail@swardana.com)

Set the SSH key Based on the Host

This step is optional. It's only applicable if your org uses a private Git repository. For example https://cgit.freedesktop.org/.

What you could do is open and modify the content of $HOME/.ssh/config file. This is an example of what you could achieve:

Host https://github.com <- change this to whatever git remote repository you're working on.
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa_personal <- change this to whatever you name your ssh-key.

The final result would be like this:

Host https://github.com
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa_personal

Host https://cgit.freedesktop.org/
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa_org

Menu Navigation