Linux / UNIX: Generate SSH Keys

How do I generate ssh keys under Linux / UNIX / Mac OS X and *BSD operating systems for remote login?

SSH uses public-key cryptography to authenticate the remote computer and allow the remote computer to authenticate the user, if required. You can create ssh keys as follows on any Linux or UNIX-like operating systems including Mac OS X.[donotprint][/donotprint]

ssh-keygen Command

The ssh-keygen command generates, manages and converts authentication keys for ssh client and server usage. Type the following command to generate ssh keys (open terminal and type the command):
$ ssh-keygen
Sample outputs:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/vivek/.ssh/id_rsa): 
Created directory '/home/vivek/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vivek/.ssh/id_rsa.
Your public key has been saved in /home/vivek/.ssh/
The key fingerprint is:
58:3a:80:a5:df:17:b0:af:4f:90:07:c5:3c:01:50:c2 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|   .+o++o.       |
|   +E. ++        |
|  o . o o.       |
|   . o B .       |
|    . B S        |
|       *         |
|      . .        |
|       o         |
|        .        |

The above command creates ~/.ssh/ directory. So if your user name is vivek, than all files are stored in /home/vivek/.ssh/ or $HOME/.ssh/ directory as follows:

  • $HOME/.ssh/id_rsa – Your private key
  • $HOME/.ssh/ – Your public key

Please note that the passphrase must be different from your current password and do not share keys or passphrase with anyone. Also, make sure you have correct and secure permissions on $HOME/.ssh/ directory:

ls -ld $HOME/.ssh/
chmod 0600 $HOME/.ssh/

ls -ld $HOME/.ssh/
chmod 0600 $HOME/.ssh/

Keys Are Generated, What Next?

You need to copy $HOME/.ssh/ file to remote server so that you can login using keys instead of the password. Use any one of the following command to copy key to remote server called for vivek user:
ssh-copy-id [email protected]
On some *nix system such as OS X ssh-copy-id command may not be installed, use the following commands (when prompted provide the password for remote user account called vivek) to install/append the public key on remote host:
ssh [email protected] "umask 077; mkdir .ssh"
cat $HOME/.ssh/ | ssh [email protected] "cat >> .ssh/authorized_keys"

To login simply type:
ssh [email protected]
The following command will help to remember passphrase
exec ssh-agent $SHELL
ssh [email protected]

Recommend readings:

Posted by: SXI ADMIN

The author is the creator of SXI LLC and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.