SSH Client Keys allow you to quickly login to a remote server via SSH without typing your password. This is very useful if you login to a remote *nix server on a regular basis or if you want to automate scripts that need to remotely connect using SSH (using commands such as rsync
or cvs
over SSH).
I have used SSH keys for awhile now, but whenever I setup a new server I seem to draw a blank when trying to remember how to set them up. Each time I end up searching Google for "SSH Client Keys" and clicking on the excellent O'Reilly page "Quick Logins with ssh Client Keys". I really don't like duplicating information that is already available on the web, but I felt it was necessary to explain a couple of points the O'Reilly page misses, particularly about the authorized_keys2
file on the server.
Because I've followed the setup procedure so many times, I usually only need to glance at the directions to remember how its done. However, it was doing this that caused me much frustration today. I discovered that it is very important that the server-side ~/.ssh
directory (and all files inside) are chmod 0700
(!), otherwise this whole process is pointless!
Before I review how to setup SSH Client Keys, let me give a brief overview of the files involved:
Client-side:
~/.ssh/id_rsa
(private key,chmod 0600
)
~/.ssh/id_rsa.pub
(public key,chmod 0655
)Server-side:
~/.ssh/authorized_keys2
(holds a list of public keys,chmod 0700
)
Now that you know what files are needed, let me explain how to go about creating them. The procedure for getting SSH keys setup is rather straightforward. First of all, if you've never used SSH keys before you probably need to generate a public/private key pair on the client-side (your workstation). From your home directory, run the following command:
$ ssh-keygen -t rsa
When prompted, leave the default options as they are (that includes leaving the passphrase
option blank) and simply press Enter until you're back at your command prompt. If you did not already have a ~/.ssh
directory, this command will create the directory and place two files inside: Your private id_rsa
and the public id_rsa.pub
version of it to use on remote servers.
Now that you have the Client-side files you need, it's time to create the necessary server-side files and copy the contents of your public key file (id_rsa.pub
) to authorized_keys2
on the server-side. The procedure outlined on the O'Reilly page assumes you don't already have any SSH keys setup on the remote server and simply replaces authorized_keys2
with the contents of id_rsa.pub
. The two commands you are instructed to run are:
$ ssh server "mkdir .ssh; chmod 0700 .ssh"
$ scp .ssh/id_rsa.pub server:.ssh/authorized_keys2
While this is fine for those who are setting the keys up for the first time on a new server/account, it may slip up those who already use them. If the file already exists, it will overwrite any existing keys listed in the authorized_keys2
file. The authorized_keys2
file is simply a text file list of the public keys (the contents of ~/.ssh/id_rsa.pub
on the client-side).The easiest thing to do if the file already exists on the server-side is to simply copy the contents of your ~/.ssh/id_rsa.pub
file, SSH over to the server, open authorized_keys2
, and paste your key at the bottom of the list.
Now you should be able to type ssh server
and automatically login without typing a password!