SSH is one of the key
tools used for modern web development but it's not very well known
that ssh
can be configured to make life easier. Modern applications
often bear little resemblance to those that existed when ssh was
developed so tweaking the default settings is increasingly important.
AWS
At work lots of our infrastructure sits
in AWS where we run applications on
autoscaled servers. We deploy
very regularly and each deployment means completely replacing the
application's servers. This undermines the
public fingerprint check
that ssh offers because you will likely only connect to each server at
most once over its lifetime. AWS instances also have a default
username. Typing ec2-user
every time gets old fast.
SSH config
If you're running ssh
on a UNIX server of some sort, you can create
a config file in your ~/.ssh
directory. I create a section in the
config file for AWS servers that looks like the following:
Host ec2-*.eu-west-1.compute.amazonaws.com
User ec2-user
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel QUIET
Note: If you use Ubuntu instances the user should be ubuntu
in place of
ec2-user
The Host line scopes the following configuration to servers that match
the pattern that follows. I've decided to match any server in the
eu-west-1
region, your pattern will probably be different. You can
match any region with something like ec2-*.compute.amazonaws.com
.
We then provide the config for matching servers, first specifying the
user as ec2-user
. This will be used as the default user when a
sshing to a server matching the Host pattern. The last three lines
disable the public fingerprint check and make the console output a
little less spammy.
Also useful for other servers!
Creating a good ssh config is always very useful so don't feel limited to doing this only for your AWS instances. I have quite a few server configurations that act as simple aliases for a server and user. Something like the following will save you lots of typing if you ssh to the machine quite a bit.
Host example
User my-user
HostName my-server.example.com
With this config in place, ssh example
is equivalent to ssh my-user@my-server.example.com
.
There's lots more you can do with your ssh config so have a look at the man page and let me know if you come up with something amazing.