I have a handful servers where I login regularly and started to created separate ssh-keys for each client-server pair instead of the standard practice of just one ssh-key per client.

The basic idea

If you only have one ssh-key and it get accidentally (or intentionally by your nemesis) it’s quite a chore to hunt down all the places where you used that key to change it and check for unauthorized access. Instead we create one ssh-key for each client-server pair.

In theory

Say you have a client and two servers cleverly named Server1 (10.0.0.10) and Server2 (10.0.0.11).

First you create a directory under ~/.ssh called keys and in this directory you create two new keys by running ssh-keygen -f [email protected] and ssh-keygen -f [email protected].

Then you update your ~/.ssh/config and add IdentityFile ~/.ssh/keys/%r@%h. This will make your ssh-client check for a user/host-specific key when you connect to a server. We use both %r (remote username) and %h (hostname) to be able to have separate ssh-keys for different users on a host.

In practice

Your ~/.ssh/config file might look like this when you’re done:

IdentityFile ~/.ssh/keys/%r@%h

host server1
hostname 10.0.0.10
user mrfoo

host server2
hostname 10.0.0.11
user mrfoo

In conclusion

Good luck! 🙂