SSH and Multiple Keys

I do a lot of stuff with SSH.  And I’m a fan of using separate keys for most things: the generic public key

~/.ssh/id_dsa.pub

for my specific workstation; and then a special, non-workstation-specific key for other stuff.

So I’ve got a key for things like:

  • Digital Ocean
  • SourceForge.net
  • BitBucket
  • GitHub

Frustratingly enough, once one has enough identities, one runs into a problem: Too many authentication failures.  Every time I see it, I have to go figure out why, and a workaround.  And that’s a couple of precious minutes that I’ll never get back.

Well, I’ve finally found a solution…  I actually already had it, I just forgot. My salvation lies in this file:

~/.ssh/config

The key is actually the first part, “Host *.hostname.com”, which is like a per-domain catch-all:

GSSAPIAuthentication no
Host *.hostname.com
    PubkeyAuthentication no
Host test
    Hostname www.test.foo
    User danf
    IdentityFile /home/danf/.ssh/digitalocean_id_rsa.pub
Host *.server04.com
    IdentityFile /home/danf/.ssh/source.server04.com_dsa.pub
Host cs
    Hostname indigo.crazedsanity.com
    User danf
    IdentityFile /home/danf/.ssh/digitalocean_id_rsa.pub
    IdentitiesOnly yes
    ServerAliveInterval 20

Oh, and this configuration allows me to use shortcuts that don’t have to resolve to real hosts and don’t require entries in my /etc/hosts file. So I can literally type ssh cs and get to where I want.

EDIT: apparently, there’s not a catch-all.  At least not a global one… but you can set one for an entire domain (like “*.hostname.com”) and that works magically.  So… close enough.  At least for government work.