How To Set Up SSH Keys

About SSH Keys

Secure Shell (better known as SSH) is a cryptographic network protocol which allows users to securely perform a number of network services over an unsecured network. SSH keys provide a more secure way of logging into a server with SSH than using a password alone. While a password can eventually be cracked with a brute force attack, SSH keys are nearly impossible to decipher by brute force alone.

Generating a key pair provides you with two long string of characters: a public and a private key. You can place the public key on any server, and then unlock it by connecting to it with a client that already has the private key. When the two match up, the system unlocks without the need for a password. You can increase security even more by protecting the private key with a passphrase.

Within some of the commands found in this tutorial, you will notice some highlighted values. These are variables, and you should substitute them with your own values.


Step One—Create the RSA Key Pair

The first step is to create the key pair on the client machine (there is a good chance that this will just be your computer):

  • ssh-keygen -t rsa


Step Two—Store the Keys and Passphrase

Once you have entered the Gen Key command, you will get a few more questions:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

You can press enter here, saving the file to the user home (in this case, my example user is called demo).

Enter passphrase (empty for no passphrase):

It's up to you whether you want to use a passphrase. Entering a passphrase does have its benefits: the security of a key, no matter how encrypted, still depends on the fact that it is not visible to anyone else. Should a passphrase-protected private key fall into an unauthorized users possession, they will be unable to log in to its associated accounts until they figure out the passphrase, buying the hacked user some extra time. The only downside, of course, to having a passphrase, is then having to type it in each time you use the key pair.

The entire key generation process looks like this:

  • ssh-keygen -t rsa
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

The public key is now located in /home/demo/.ssh/id_rsa.pub. The private key (identification) is now located in /home/demo/.ssh/id_rsa.


Step Three—Copy the Public Key

Once the key pair is generated, it's time to place the public key on the server that we want to use.

You can copy the public key into the new machine's authorized_keys file with the ssh-copy-id command. Make sure to replace the example username and IP address below.

  • ssh-copy-id demo@192.168.3.15


Note:
If you are a Mac user, ssh-copy-id will not be installed on your machine. You can, however, install it using Homebrew:

  • brew install ssh-copy-id


Alternatively, you can paste in the keys using SSH:

  • cat ~/.ssh/id_rsa.pub | ssh demo@192.168.3.15 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys"


No matter which command you chose, you may see something like:

The authenticity of host '192.168.3.15 (192.168.3.15)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.3.15' (RSA) to the list of known hosts.
user@192.168.3.15's password: 


This message helps us to make sure that we haven't added extra keys that you weren't expecting.

Now you can go ahead and log into your user profile and you will not be prompted for a password. However, if you set a passphrase when creating your SSH key, you will be asked to enter the passphrase at that time (and whenever else you log in in the future).


Optional Step Four—Disable the Password for Root Login

Once you have copied your SSH keys onto your server and ensured that you can log in with the SSH keys alone, you can go ahead and restrict the root login to only be permitted via SSH keys.

In order to do this, open up the SSH config file:

  • sudo nano /etc/ssh/sshd_config

Within that file, find the line that includes PermitRootLogin and modify it to ensure that users can only connect with their SSH key:

/etc/ssh/sshd_config
PermitRootLogin without-password

Save and close the file when you are finished.

To put these changes into effect:

  • service sshd reload

Disabling SSH Password Authentication

  1. On the target server, open the OpenSSH configuration file into a text editor, like VI or Nano.
    nano /etc/ssh/sshd_config
  2. Locate the following lines:
    #RSAAuthentication yes #PubkeyAuthentication yes PasswordAuthentication yes
  3. Uncomment the RSA and Public Key authentication lines, and then disable Password Authentication.
    RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication no
  4. Save your changes and exit the text editor.
  5. Reload the SSHD configuration file.
    service sshd reload


  • 0 Users Found This Useful
Was this answer helpful?

Related Articles

A Basic MySQL Tutorial

About MySQL MySQL is an open source database management software that helps users store,...

How To Configure vsftpd to Use SSL/TLS on a CentOS server

Introduction Warning: FTP is insecure! Consider using SFTP instead of FTP. FTP, or file...

How To Install DenyHosts on CentOS 6

About DenyHosts DenyHosts is a security tool written in python that monitors server access logs...

How To Protect SSH with fail2ban on CentOS 6

About Fail2Ban Servers do not exist in isolation, and those servers with only the most basic SSH...

How To Set Up vsftpd on CentOS 6

About vsftpd Warning: FTP is inherently insecure. If you must use FTP, consider securing your...