If your like me and you deal with a lot of servers for development or test and do it from a Unix machine, I’ve got a really handy tip: SSH hostname pattern matching.

Say I’ve got a SSH config file like this (at ~/.ssh/config ):

host s*
    HostName atrcu%h.example.com
    User example1
    Port 22
host b*
    HostName atrcx%h.example.com
    User example2
    Port 22
host ??*
    HostName atvts%h.example.com
    User example5
    Port 2205

The ssh man page explains this really well:

A pattern consists of zero or more non-whitespace characters, ‘*’ (a wildcard that matches zero or more characters), or ‘?’ (a wildcard that matches exactly one character). For example, to specify a set of decla- rations for any host in the .co.uk set of domains, the following pat- tern could be used:

Host *.co.uk

The following pattern would match any host in the 192.168.0.[0-9] network range:

Host 192.168.0.? 

A pattern-list is a comma-separated list of patterns. Patterns within pattern-lists may be negated by preceding them with an exclamation mark (‘!’). For example, to allow a key to be used from anywhere within an organisation except from the ``dialup’’ pool, the following entry (in authorized_keys) could be used:


So there you have it!