Automatic passwrod-less ssh login can make our life easier. To enable this, we need to copy our SSH public keys to the remote machines for automatic password-less login. We introduce two methods in this post: using ssh-copy-id command and the manual way.
Generate SSH key pair
If you do not have a SSH private/public key pair, let’s generate one first.
$ ssh-keygen -t rsa
By default on Linux, the key pair is stored in ~/.ssh (id_rsa and id_rsa.pub for private and public key).
Copy public SSH key to the remote machine
You have two choices here. Unless that you can not use the ssh-copy-id method, you can try the “manual” way.
The easiest way
Let ssh-copy-id do it automatically:
$ ssh-copy-id username@remotemachine
If you have multiple keys in your ~/.ssh directory, you may need to use -i key_file to specify which key you will use.
The manual way
Copy the public SSH key to remote machine
$ scp .ssh/id_rsa.pub username@remotemachine:/tmp/
Log on the remote machine
$ ssh username@remotemachine
Append your public SSH key to ~/.ssh/authorized_keys
$ cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak # backing up before changing is a good habit
$ cat /dev/shm/id_rsa.pub >> ~/.ssh/authorized_keys # append pub key to authorized keys list
Make sure the mode of ~/.ssh/authorized_keys is 755:
$ chmod 755 ~/.ssh/authorized_keys
Possible Problems
Home directory permission
Check the home directory’s permission which may cause the key-based login fail (suppose the home directory is /home/zma):
# chmod 700 /home/zma/