How To Set Up SSH Keys on Ubuntu

How To Set Up SSH Keys on Ubuntu

Secure Shell (SSH) is an essential tool for anyone looking to manage servers remotely in a secure manner. SSH provides a cryptographic network protocol for operating network services securely over an unsecured network. Notably, the use of SSH keys, comprising a private key and a public key, enhances security significantly by enabling secure authentication without the need for passwords. This approach to server management not only increases the security of network communications but also streamlines the process, making it more efficient and less susceptible to brute-force attacks.


SSH, or Secure Shell, is a protocol that allows users to securely access a remote computer over an unsecured network. It encrypts the data transmitted between the client and server, ensuring that sensitive information remains confidential and protected from unauthorized access. One of the key advantages of SSH is its support for public key authentication, which offers a more secure and convenient alternative to traditional password-based authentication. By using SSH keys, users can establish secure connections without the need to enter passwords, reducing the risk of password phishing and other forms of cyber attacks.


Before diving into SSH key authentication, there are a few basic requirements you should meet. First, you should have a basic understanding of using the command line interface on Ubuntu, as most operations discussed here are performed in the terminal. Additionally, you’ll need access to an Ubuntu server where you can implement SSH key authentication. Finally, ensure you have the necessary permissions to make changes to the server’s configuration, as you’ll be modifying SSH settings and handling sensitive files.

Understanding SSH Key Authentication

Public and Private Keys

SSH key authentication relies on a pair of cryptographic keys: a public key and a private key. The public key can be safely shared and is placed on the server, while the private key remains securely with the user. These keys work together to authenticate the user’s access to the server. The private key is used to generate a digital signature that the server can verify using the corresponding public key, ensuring that the user is indeed who they claim to be without transmitting the private key itself.

How SSH Key Authentication Works

When a client attempts to connect to a server, the server asks the client to prove possession of the private key corresponding to the public key stored on the server. The client then signs a message with its private key, which the server verifies using the public key. If the verification is successful, the authentication is considered successful, and the user is granted access.

Benefits of SSH Keys

SSH key authentication offers numerous benefits over traditional password-based authentication. It significantly enhances security by eliminating the risks associated with password interception and brute-force attacks. SSH keys are also more convenient for users, as they can automate login processes without the need to enter passwords manually. Additionally, SSH keys can be used to establish secure automated processes, such as backups and script executions, further increasing the efficiency and security of remote server management.

Generating SSH Keys on Ubuntu

Installing the SSH Package

Before generating SSH keys, ensure the SSH package is installed on your Ubuntu system. If not, you can install it by opening a terminal and running the following command:

sudo apt update && sudo apt install openssh-client

This command updates your package list and installs the OpenSSH client, which includes the ssh-keygen utility used for generating SSH key pairs.

Generating a New SSH Key Pair

To generate a new SSH key pair, use the ssh-keygen command:

ssh-keygen -t rsa -b 4096

This command creates a new RSA key pair with a 4096-bit key size, offering a good balance between security and compatibility. When prompted, you can enter a passphrase for an extra layer of security. The passphrase will be required every time you use the private key, adding an additional level of protection.

Configuring SSH Key-based Authentication

Copying the Public Key to the Remote Server

After generating the SSH key pair, the next step is to copy the public key to the remote server. This can be easily done using the ssh-copy-id command:

ssh-copy-id user@hostname

Replace user with your username on the server and hostname with the server’s address. If ssh-copy-id is not available, you can manually copy the public key content to the server’s ~/.ssh/authorized_keys file.

Setting File Permissions

Finally, ensure the file permissions are correctly set on the server. The .ssh directory should have 700 permissions, and the authorized_keys file should have 600 permissions. This can be achieved with the following commands:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Correct file permissions are crucial for SSH to function securely and effectively, as overly permissive settings can be a security risk.

SSH Server Configuration

Editing the SSH Configuration File

To enable key-based authentication on an Ubuntu server, the SSH configuration file, located at /etc/ssh/sshd_config, needs to be modified. Here’s how you do it:

  1. Open the Configuration File: Use a text editor like nano or vim to open the SSH configuration file. For example:
    sudo nano /etc/ssh/sshd_config
  2. Modify the Settings: Look for the following lines in the file and modify them as shown:
    • PasswordAuthentication no: This disables password authentication, ensuring only key-based logins are allowed.
    • PubkeyAuthentication yes: This enables public key authentication.

    If these lines are commented out (prefixed with #), remove the #.

  3. Save and Close the File: After making the changes, save and exit the editor. In nano, this is done by pressing CTRL + X, then Y, and Enter.

Restarting the SSH Service

Once the configuration file is updated, restart the SSH service to apply the new settings:

sudo systemctl restart sshd

This command ensures that the SSH service is reloaded with the updated configurations, enabling the key-based authentication setup.

Connecting to the Server Using SSH Keys

SSH into the Server

To connect to your server using SSH keys, use the ssh command along with your private key:

ssh -i /path/to/private_key username@server_ip

Replace /path/to/private_key with the path to your private key file, username with your server’s username, and server_ip with your server’s IP address.

Troubleshooting Connection Problems

Common issues when establishing an SSH key-based connection include:

  • Permissions Error: Ensure your private key file has the correct permissions (readable only by you). Use chmod 600 /path/to/private_key to set proper permissions.
  • Connection Timed Out: Verify the server’s IP address and ensure your network connection is stable.
  • Authentication Failure: Double-check that the correct public key is added to the ~/.ssh/authorized_keys on the server.

Advanced SSH Key Management

Managing Multiple SSH Keys

For managing multiple SSH keys (for different servers or services), you can:

  • Use different key pairs for each service and store them securely.
  • Name the key files appropriately to avoid confusion.
  • Edit the ~/.ssh/config file to specify which key to use for each host.

Using SSH Agent for Key Management

The SSH agent is a tool that keeps your SSH keys in memory, allowing you to use them without entering the passphrase every time.

  • Add your keys to the agent using ssh-add /path/to/private_key.
  • Automate the process by adding the ssh-add command to your shell’s startup file, like .bashrc or .bash_profile.

Security Considerations

Securing SSH Keys

  • Use strong passphrases for your SSH keys.
  • Store private keys in a secure location.
  • Regularly update the passphrase and consider using a key manager.

Limiting SSH Access

To enhance security, limit who can SSH into your system:

  • Use AllowUsers or AllowGroups directives in /etc/ssh/sshd_config to specify allowed users or groups.

Auditing and Rotating SSH Keys

  • Conduct regular security audits to check for unauthorized keys.
  • Rotate your SSH keys periodically for enhanced security.


Setting up SSH keys on an Ubuntu server is an essential step towards secure server management. It’s a more secure alternative to password-based logins, and with the steps outlined above, you can ensure a safer environment for your server operations.

Sharing is caring

Did you like what Rishabh Rao wrote? Thank them for their work by sharing it on social media.


No comments so far