Some time ago I wrote up some notes on OpenSSH's optional hostname canonicalization . At the time I had just cautiously switched over to having my OpenSSH setup on my workstation canonicalize my hostnames, and I half expected it to go wrong somehow. It's been just over a year since then and not only has nothing blown up, I now actively prefer having OpenSSH canonicalize the hostnames that I use and I've just today switched my OpenSSH setup on our login servers over to do this and cleared out my
~/.ssh/known_hosts
file to start it over from scratch.
That latter bit is a big part of why I've come to like hostname canonicalization. We have a long history of using multiple forms of shortened hostnames for convenience, plus sometimes we wind up using a host's fully qualified name. When I didn't canonicalize names, my
known_hosts
file wound up increasingly cluttered with multiple entries for what was actually the same host, some of them with the IP address and some without. After canonicalization, all of this goes away; every host has one entry and that's it. Since we already maintain a system-wide set of SSH known hosts (partly for our custom NFS mount authentication system ), my own
known_hosts
file now doesn't even accumulate very many entries.
(I should probably install our global SSH known hosts file even on my workstation, which is deliberately independent from our overall infrastructure; this would let me drastically reduce my
known_hosts
file there too.)
The other significant reason to like hostname canonicalization is the reason I mentioned in my original entry , which is that it allows me to use much simpler
Host
matching rules in my
~/.ssh/config
while only offering my SSH keys to hosts that should actually accept them (instead of to everyone, which can have various consequences ). This seems to have become especially relevant lately, as some of our recently deployed hosts seem to have reduced the number of authentication attempts they'll accept (and each keypair you offer counts as one attempt). And in general I just like having my SSH client configuration saying what I actually want, instead of having to flail around with '
Host *
' matches and so on because there was no simple way to say 'all of our hosts'. With canonical hostnames, now there is.
As far as DNS reliability for resolving CNAMEs goes, we haven't had any DNS problems in the past year (or if we have, I failed to notice them amidst greater problems). We might someday, but in general DNS issues are going to cause me problems no matter what, since my
ssh
has to look up at least IP addresses in DNS. If it happens I'll do something, but in the mean time I've stopped worrying about the possibility.