Setting Up SSH on Ubuntu: Enabling and Configuring SSH for Remote Access

SSH is a widely used protocol that allows users to access and manage remote systems securely over an encrypted connection. It is the de facto standard for secure remote login in Unix-based systems, making it essential for who need to manage remote machines.

Setting Up SSH on Ubuntu: Enabling and Configuring SSH for Remote Access

1. Introduction to SSH

SSH (Secure Shell) is a widely used protocol that allows users to access and manage remote systems securely over an encrypted connection. It is the de facto standard for secure remote login in Unix-based systems like Ubuntu, making it essential for system administrators, developers, and power users who need to manage remote machines or servers.

By using SSH, you can:

  • Access the terminal of a remote machine.
  • Transfer files securely.
  • Tunnel other protocols over an encrypted connection.
  • Execute commands on remote machines.

In this post, we will go through the steps of setting up, enabling, and configuring SSH on Ubuntu to allow remote access.

2. Why Use SSH for Remote Access?

There are several reasons to use SSH for remote access:

  1. Security: SSH encrypts the communication between the client and server, protecting sensitive data like usernames, passwords, and commands.
  2. Convenience: It allows users to access a remote system's terminal interface and control it as if they were physically present at the machine.
  3. File Transfer: SSH supports secure file transfer protocols like SCP (Secure Copy Protocol) and SFTP (SSH File Transfer Protocol).
  4. Portability: SSH is a cross-platform protocol that works on Linux, macOS, and Windows (with tools like PuTTY or the built-in OpenSSH client in Windows 10+).

3. Installing SSH on Ubuntu

By default, Ubuntu does not come with the SSH server installed, so the first step is to install the openssh-server package. You can use the following command to do this:

sudo apt update
sudo apt install openssh-server

The openssh-server package contains the SSH server software necessary to allow incoming SSH connections. Once installed, the SSH service will automatically start and listen for incoming connections.

To check if the SSH service is installed and running, use the following command:

sudo systemctl status ssh

You should see an output indicating that the SSH service is active and running. If it is not running, you can manually start it with:

sudo systemctl start ssh

4. Enabling and Starting the SSH Service

Once SSH is installed, you’ll want to ensure that it starts automatically when the system boots. You can enable the SSH service with the following command:

sudo systemctl enable ssh

This will make sure the SSH server starts every time your Ubuntu system boots up. If, for some reason, the service is not running, you can start it manually:

sudo systemctl start ssh

At this point, the SSH server is up and running, and you can already start connecting to your Ubuntu machine remotely using an SSH client.

5. SSH Configuration Options

The SSH server configuration file is located at /etc/ssh/sshd_config. This file contains various options that can be modified to improve security, change default settings, or enable additional features. To edit this file, use a text editor like nano or vim:

sudo vim /etc/ssh/sshd_config

Let’s explore some important configuration options you might want to change.

5.1 Changing the SSH Port

By default, SSH listens on port 22, which is widely known. For added security, it’s a good idea to change the SSH port to a non-standard one to reduce the risk of brute force attacks.

To change the port, find the line in the configuration file that reads:

#Port 22

Uncomment the line by removing the #, and change the port number:

Port 2222

Save the changes and restart the SSH service:

sudo systemctl restart ssh

Now, SSH will listen on port 2222 instead of the default port 22. When connecting, you’ll need to specify the new port number:

ssh -p 2222 user@your-server-ip

5.2 Disabling Root Login

Allowing root login over SSH can be a security risk. By disabling root login, you reduce the attack surface of your server.

In the SSH configuration file, find the following line:

PermitRootLogin yes

Change it to:

PermitRootLogin no

Save the changes and restart the SSH service:

sudo systemctl restart ssh

This will prevent the root user from logging in directly via SSH.

5.3 Configuring SSH Key Authentication

Password-based authentication can be vulnerable to brute force attacks. A more secure method is to use SSH key authentication, which involves generating a key pair (public and private keys).

Disable password authentication (optional, but recommended). In the SSH configuration file, find the following line:

#PasswordAuthentication yes

Uncomment it and change it to:

PasswordAuthentication no

Save the changes and restart SSH:

sudo systemctl restart ssh

Copy the public key to the remote Ubuntu machine:

ssh-copy-id user@your-server-ip

This command will place the public key in the ~/.ssh/authorized_keys file on the remote server.

Generate SSH keys on the client machine (e.g., your local computer):

ssh-keygen -t rsa -b 4096

By default, this will generate a key pair in the ~/.ssh directory.

With key-based authentication, you will no longer need to enter a password to log in; instead, your private key will be used for authentication.

5.4 Limiting User Access

To enhance security, you may want to restrict which users are allowed to log in via SSH. To do this, you can add the following line to the SSH configuration file:

AllowUsers user1 user2

This will restrict SSH access to the specified users.

6. Managing the SSH Service

You can manage the SSH service using the systemctl command:

To enable SSH to start at boot:

sudo systemctl enable ssh

To restart SSH:

To stop SSH:

sudo systemctl restart ssh
sudo systemctl stop ssh

To start SSH manually:

sudo systemctl start ssh

To check the status of SSH:

sudo systemctl status ssh

7. Firewall Configuration for SSH

If you have a firewall enabled on your Ubuntu system, you’ll need to allow SSH traffic. Ubuntu’s default firewall, UFW (Uncomplicated Firewall), can be configured with the following command:

sudo ufw allow ssh

If you changed the SSH port from the default port 22, you’ll need to specify the custom port:

sudo ufw allow 2222/tcp

To enable the firewall (if it's not already active):

sudo ufw enable

8. Testing SSH Connectivity

Once SSH is set up, you can test your connection by attempting to SSH into your Ubuntu machine from another computer. For example, from a Linux or macOS terminal:

ssh user@your-server-ip

Or, if you changed the SSH port:

ssh -p 2222 user@your-server-ip

For Windows users, you can use an SSH client like PuTTY to connect to the Ubuntu machine.

9. Advanced SSH Configurations

SSH offers advanced features that can improve usability and security.

9.1 SSH Tunneling

SSH tunneling allows you to securely forward traffic through an encrypted SSH connection. It can be used for accessing remote resources, like websites or services, through a secure tunnel.

To create an SSH tunnel:

ssh -L local_port:remote_address:remote_port user@your-server-ip

For example, to forward traffic from your local machine's port 8080 to a remote web server on port 80:

ssh -L 8080:example.com:80 user@your-server-ip

Now, when you access localhost:8080 in your web browser, the traffic will be securely forwarded to example.com over the SSH tunnel.

9.2 X11 Forwarding

X11 forwarding allows you to run graphical applications on a remote machine and display them on your local machine. To enable X11 forwarding, add the following line to the SSH configuration file:

X11Forwarding yes

Then, when connecting via SSH, use the -X option:

ssh -X user@your-server-ip

You can now launch graphical applications from the remote machine, and they will appear on your local display.

10. Troubleshooting SSH Issues

If you encounter problems with SSH, here are some common troubleshooting steps:

  • Check the SSH logs: SSH logs can be found in /var/log/auth.log. Look for any error messages or issues that might explain connection problems.

Verify network connectivity: Use the ping command to check if your remote machine is reachable:

ping your-server-ip

Check the firewall: Ensure that SSH traffic is allowed through the firewall:

sudo ufw status

Check the SSH service: Make sure the SSH service is running:

sudo systemctl status ssh

Conclusion

Setting up SSH on Ubuntu is an essential step for anyone who needs to remotely access or manage their machine. By enabling SSH and properly configuring the server, you can ensure a secure, convenient, and efficient way to connect to your Ubuntu system from anywhere. With options for SSH key authentication, advanced configurations, and security features like disabling root login, you can tailor the SSH server to meet your specific needs.

Whether you're managing servers, transferring files, or setting up remote tunnels, SSH provides a versatile and secure solution for all your remote access requirements.

Read next

How to check health of NVMe SSD on ubuntu

A practical, step-by-step guide to checking NVMe SSD health on Ubuntu using nvme-cli, smartctl, and GNOME Disks. Learn how to read SMART data, spot early warning signs, run self-tests, update firmware, and keep your data safe.