SSH on Linux: Secure Remote Access and Key Authentication

Secure Shell (SSH) is a cryptographic network protocol that enables secure remote access to Linux systems over an encrypted connection.

SSH is widely used by system administrators, developers, and DevOps engineers to manage servers, transfer files, and execute remote commands securely.

This guide covers SSH basics, key-based authentication, file transfers, configuration, and security best practices.

Concept Overview

SSH encrypts communication between a client and a remote server, preventing unauthorized access and protecting sensitive data from interception.

Unlike older protocols such as Telnet, SSH provides strong authentication and encrypted communication.

Key Concepts

1. SSH Client – Initiates a secure connection to a remote server.

2. SSH Server (sshd) – Accepts incoming SSH connections.

3. Public Key – Shared with the remote server for authentication.

4. Private Key – Stored securely on the client and never shared.

5. SSH Port – By default, SSH listens on TCP port 22.

Connecting to a Remote Server

Use the ssh command to establish a secure connection to a remote Linux machine.

BASH
ssh username@192.168.1.100
ssh username@example.com
ssh -p 2222 username@example.com

Explanation

Specify the username followed by the hostname or IP address.

Use the -p option when the SSH server listens on a custom port.

Generating SSH Keys

SSH key authentication is more secure and convenient than password-based authentication.

BASH
ssh-keygen -t ed25519
ssh-keygen -t rsa -b 4096
ls ~/.ssh

Explanation

ssh-keygen creates a public and private key pair.

The private key remains on your computer, while the public key is copied to the remote server.

Configuring Key-Based Authentication

Copy your public key to the remote server to enable passwordless login.

BASH
ssh-copy-id username@server

# Manual method
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

Explanation

The ssh-copy-id utility automatically installs your public key into the server's authorized_keys file.

After setup, SSH authenticates using your private key instead of a password.

Transferring Files with SCP

The Secure Copy Protocol (SCP) securely transfers files between Linux systems using SSH.

BASH
scp file.txt user@server:/home/user/
scp user@server:/home/user/report.pdf .
scp -r project/ user@server:/home/user/

Explanation

scp copies files and directories over encrypted SSH connections.

Use the -r option when copying entire directories.

Remote File Synchronization with rsync

BASH
rsync -avz project/ user@server:/home/user/project/

rsync efficiently transfers only changed files, making it ideal for backups and deployments.

SSH Configuration

SSH behavior can be customized using client and server configuration files.

BASH
nano ~/.ssh/config
sudo nano /etc/ssh/sshd_config

Example Client Configuration

TEXT
Host myserver
    HostName example.com
    User john
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

After saving this configuration, you can connect simply by running 'ssh myserver'.

Useful SSH Commands

BASH
ssh -V
systemctl status ssh
systemctl restart ssh
ssh-agent bash
ssh-add ~/.ssh/id_ed25519

These commands help verify the SSH version, manage the SSH service, and use ssh-agent to cache private keys.

Example Workflow

Generate an SSH key pair using ssh-keygen.

Copy the public key to the remote server using ssh-copy-id.

Connect securely without entering a password.

Transfer project files using scp or rsync.

Configure SSH aliases for frequently accessed servers.

Applications

Managing Linux servers remotely.

Deploying applications and managing cloud infrastructure.

Secure file transfers between systems.

Automating administrative tasks with scripts.

Using Git repositories over SSH authentication.

Advantages

Provides encrypted communication between systems.

Supports secure passwordless authentication using SSH keys.

Allows secure remote command execution and file transfers.

Widely supported across Linux, macOS, and Windows.

Limitations

Incorrect server configuration may expose security vulnerabilities.

Private keys must be protected to prevent unauthorized access.

Firewall rules may block SSH connections if port 22 or custom ports are restricted.

Best Practices

Use SSH keys instead of passwords whenever possible.

Disable root login over SSH on production servers.

Disable password authentication after configuring SSH keys.

Use strong passphrases to protect private keys.

Keep the OpenSSH server updated with the latest security patches.

Mastering SSH is an essential skill for Linux administrators, DevOps engineers, cloud professionals, and developers who manage remote systems securely.