Cool Boiled WaterCool Boiled Water Logo
HomeBlog
ssh meme

SSH: The Secure Communication Backbone

Devops
2 hours ago3228 words|Estimated reading time: 17 minutes

SSH: Past and Present

In today's fast-changing internet world, we often need to connect different devices.

Whether managing servers from afar or moving important files, keeping the connection safe and reliable is very important.

But early network communication had big security holes. This is why the SSH protocol was created.

The Telnet Problem

Back in the 1980s and 1990s, Telnet was the main way to log in to computers remotely. It was very helpful for system managers and developers.

With Telnet, users could run commands on a remote machine as if they were sitting right in front of it.

But this convenience came with a big security risk. Telnet's biggest flaw was plain text transmission. This means usernames, passwords, and all commands were sent over the network as simple, unencrypted text.

It was like writing your password on a postcard—anyone who handled it could read it easily.

Even worse, Telnet was open to "man-in-the-middle attacks." An attacker could secretly intercept the communication. They could not only steal information but also change the messages being sent. These security flaws are unacceptable today, as cybersecurity awareness becomes increasingly important.

The SSH Security Upgrade

In 1995, a Finnish computer scientist named Tatu Ylönen saw this security problem and created the new SSH (Secure Shell) protocol. The key innovation of SSH was that it created an encrypted tunnel. This ensured that even if data was intercepted, attackers could not read it.

The SSH protocol was quickly accepted by the industry. Using modern encryption, it protected against threats like man-in-the-middle attacks, DNS spoofing, and IP spoofing. Just as importantly, SSH provided strong ways to verify the identity of the person connecting.

It is also important that SSH balanced security with speed. Its built-in data compression helped use bandwidth efficiently, making a good balance between safety and performance.

Protocol Improvement

The SSH protocol itself has also gotten better over time:

  • SSH-1: The first version. It fixed the big security problems of its time, but later, some weaknesses were found as encryption technology improved.
  • SSH-2: This is the version everyone uses now. It uses stronger encryption and better security. Compared to SSH-1, SSH-2 was redesigned from the ground up, making it more secure and able to do more things.

Today, SSH is the first choice for remote server management, secure file transfer, and port forwarding.

A Simple Guide to Using SSH

SSH is an essential tool for modern system administration. Its main job is to create secure remote connections. Let's look at how to use this powerful tool step by step.

Getting Ready

Before using SSH, you need to make sure your system has the right software:

  • Linux/macOS Users: Usually come with the OpenSSH client already installed. You can check by typing ssh in the terminal.
  • Windows Users:
    • Newer versions (Win10/11) can add the OpenSSH client in "Optional Features."
    • The common way is to use a program with a window, like PuTTY.
  • Server Side: Almost all UNIX-like systems (like Linux and BSD) come with the SSH service pre-installed.

Making a Remote Connection

The most basic command is very simple:

ssh username@host_address

Real-world example:

ssh admin@203.0.113.45

Or using a domain name:

ssh developer@example.com

Your First Connection:

  1. The system will ask you to confirm the remote host's identity, showing a fingerprint like this: The authenticity of host 'example.com (203.0.113.45)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. This happens because your computer has never connected to this server before. It can't be sure the server is the real one and not a fake. The SHA256:nThbg6kXUpJW... is the server's unique ID, like a fingerprint. In short: Your computer says: "I've never talked to 'example.com' before. It showed me this ID. Should I trust it and remember it for next time?"
  2. Type yes to confirm. The host's key will be saved in a file called ~/.ssh/known_hosts.
  3. Next, you will be asked to type the password for that user.

Moving Files Securely

SSH gives you two main ways to transfer files:

Using SCP (Secure Copy)

# Send a file to the server
scp local_file.txt user@example.com:/remote/directory/

# Get a file from the server
scp user@example.com:/remote/file.txt /local/path/

# Copy a whole folder
scp -r local_folder user@example.com:/remote/path/

Using SFTP (SSH File Transfer Protocol)

sftp user@example.com

After you connect, you can use commands similar to FTP:

  • put Send a file
  • get Download a file
  • ls See files on the remote machine
  • lls See files on your local machine
  • cd Change folder on the remote machine
  • lcd Change folder on your local machine

Port Forwarding

SSH's port forwarding is like a "magic tunnel" for network traffic. Common uses:

Local Port Forwarding (-L)

ssh -L local_port:target_address:target_port username@jump_host

Example: Accessing a company database through a jump server

ssh -L 3306:db.internal:3306 employee@gateway.company.com

Now, if you connect to your own computer's port 3306, it will connect to the internal database.

Remote Port Forwarding (-R)

ssh -R remote_port:local_service_address:local_port username@remote_server

This is useful for letting someone on the internet access a service running on your own computer.

Managing a Remote System

After you connect successfully, you get a remote terminal where you can run system commands:

# Check system info
uname -a
cat /etc/os-release

# Check system status
top
htop  # A better viewer (may need install)
nmon  # A professional system tool

# Manage services
sudo systemctl restart nginx
sudo service mysql status

# Work with files
vim /etc/nginx/nginx.conf  # Edit a config file
grep "error" /var/log/syslog  # Look at logs

# Check network
ping google.com
traceroute example.com
netstat -tulnp

Important Notes:

  • When you use sudo, you need to type your current user's password (not the root password).
  • For commands that take a long time, use screen or tmux to avoid losing the connection if it drops.
  • Before running a dangerous command, test it first to see what it does.

By learning these basic uses, you can handle most remote management tasks. As you practice more, you will find SSH can do even more, like complex multi-hop connections.

How SSH Works Under the Hood

Although we just type simple commands to start an SSH connection, the technology behind it is quite clever. Let’s uncover how SSH secure communication works in simple terms.

Three-Layer Encryption System

SSH uses a set of encryption methods that work together to keep the connection safe. These three layers each have a role, forming a strong security net.

Symmetric Encryption – The Fast Data Safe

Think of symmetric encryption like a lockbox that needs a key. Both sides use the same key to lock and unlock the data. When you type a command in an SSH session, the data is scrambled by a symmetric encryption method (like AES-256). Only the server with the same key can unscramble and read it.

This method is very fast, good for encrypting lots of data in real time. SSH creates a unique symmetric key at the start of each session. This key works only for that session. Even if it gets cracked, other sessions stay safe.

Asymmetric Encryption – The Secure Key Courier

If symmetric encryption is the lockbox, asymmetric encryption is the safe messenger that delivers the key. It uses a pair of mathematically linked keys: a public key and a private key.

The public key can be shared openly, like your email address. The private key must be kept secret, like the key to your mailbox. Data locked with the public key can only be unlocked with the matching private key, and vice versa. During the SSH handshake, asymmetric encryption is used to safely share the symmetric key, solving the problem of key exchange.

Message Authentication Code – The Tamper-Proof Seal

Even if data is encrypted, an attacker might try to change it during transfer. The Message Authentication Code (MAC) acts like a “digital seal” to stop this.

Before sending each data packet, a unique “fingerprint” is calculated. The receiver calculates it again and checks if it matches. If the data was changed along the way, the fingerprint won’t match, and the connection stops immediately. It’s like putting an anti-fake label on each packet to ensure data integrity.

Smart Ways to Prove Your Identity

SSH offers several ways to authenticate, each with its own use cases and security features.

Password Authentication – The Classic Door Code

This is the most straightforward method, like typing a door entry code:

ssh username@hostname
# The system asks: username@hostname's password:

It’s convenient, but passwords can be guessed by brute force attacks. So in real-world setups, it’s often used with extra security like login attempt limits and strong password rules.

Public Key Authentication – The Secure Digital Key

This method is safer and more convenient. Let’s look at how it works step by step:

Generate a key pair:

ssh-keygen -t ed25519 -a 100 -C "your_email@example.com"
  • -t ed25519 chooses the EdDSA algorithm (safer and faster)
  • -a 100 sets the number of key derivation rounds, making it harder to crack
  • The private key is saved in ~/.ssh/id_ed25519 and must have 600 permissions
  • The public key is saved in ~/.ssh/id_ed25519.pub and can be shared freely

Copy the public key to the server:

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@hostname

This command automatically adds your public key to the server’s ~/.ssh/authorized_keys file.

How the authentication works:

  1. The client says it wants to use public key authentication
  2. The server creates a random challenge
  3. The server encrypts the challenge with the client’s public key
  4. The client decrypts the challenge with its private key, proving it owns the key
  5. The server checks the decrypted result and grants access if it matches

The Art of Session Management

Setting up and keeping an SSH connection alive is like a well-planned dance—every move matters.

Four Steps to Connect

Step 1: TCP Handshake

Client → Server: SYN Server → Client: SYN-ACK Client → Server: ACK

This is the base for all TCP connections—it sets up a reliable data stream.

Step 2: Agree on the SSH Version The client and server share which SSH versions they support, like "SSH-2.0-OpenSSH_8.2". If versions don’t match, the connection stops here.

Step 3: Agree on Algorithms and Exchange Keys This is the most complex and important step:

  1. Both sides share lists of supported algorithms (encryption, MAC, compression, key exchange, etc.)
  2. They pick the strongest set that both support
  3. They perform a Diffie-Hellman key exchange to create a shared session key
  4. Real keys for encryption and authentication are derived from this

Step 4: Request Service and Authenticate After the key exchange, the client can ask for a specific SSH service (like a shell or a command) and start the login process.

Advanced Session Features

SSH supports connection multiplexing, which allows multiple logical channels over one TCP connection. That means you can transfer files or forward ports without dropping the main connection, which is much more efficient.

The Magic Tunnel of Port Forwarding

SSH port forwarding creates an encrypted “data tunnel.” Let’s see how it works inside.

Local Port Forwarding Explained

ssh -L 8080:internalserver:80 jumpuser@jumpserver -N -f

This command sets up a smart forwarding chain:

  1. Local listening: The SSH client listens on local port 8080
  2. Tunnel setup: It makes an encrypted SSH connection to the jump server
  3. Request forwarding: When someone connects to local port 8080, the SSH client wraps the request inside the SSH protocol
  4. Remote relay: The jump server unwraps the request and sends it to the internal server’s port 80
  5. Response path: The reply travels back the same way

Technical details:

  • -N means no remote command is run—just forward ports
  • -f runs SSH in the background
  • Data is encrypted between your machine and the jump server; between the jump server and the target, it uses normal protocols

The power of this is that local programs can access remote network resources as if they were local.

How SSH Works at the Protocol Level

To really get SSH, we should see where it sits in the network stack.

Where SSH Fits In

Application layer: SSH client (ssh, scp, sftp) ↓ Transport layer: TCP (reliable transport, port 22) ↓ Network layer: IP (routing and addressing) ↓ Link layer: Ethernet, WiFi, etc.

The Full Life of an SSH Connection

Step 1: Basic Connection

The TCP three-way handshake sets up a reliable stream. SSH uses port 22 by default, but you can choose another port with the -p option.

Step 2: SSH Protocol Handshake

Client → Server: SSH-2.0-OpenSSH_8.2 Server → Client: SSH-2.0-OpenSSH_8.4

After agreeing on the version, both sides share and choose the best algorithms.

Step 3: Key Exchange

Modern SSH often uses elliptic curve algorithms like curve25519-sha256. These are safer and faster than old-style Diffie-Hellman.

Step 4: Two-Way Authentication

Not only does the server check the client’s identity, the client also checks the server’s. This prevents man-in-the-middle attacks. The server’s identity is checked using a host key; the first time you connect, you’ll see a fingerprint to confirm.

Step 5: Managing Service Channels

After login, SSH can handle multiple channels at once:

  • Interactive shell session
  • File transfer channel
  • Port forwarding tunnel
  • X11 forwarding connection

Each channel is separate and doesn’t interfere with others.

Step 6: Ending the Connection

When ending normally, SSH sends an exit signal and closes all channels safely. If the connection drops unexpectedly, a timeout cleans up the resources.

Understanding these details helps with troubleshooting and using SSH more safely. For example, knowing how key exchange works explains why you need to confirm the fingerprint on first connection. Understanding port forwarding helps design better networks.

SSH is designed with the idea that “security should not cost convenience.” Through smart protocol design, it gives strong protection while remaining easy to use.

Potential SSH Security Risks and Advanced Protection Methods

While SSH is one of the safest remote management protocols, all technologies have potential weak points. Knowing these risks and taking steps to protect against them is essential for every system administrator.

Weak Passwords and Brute Force Attacks

Risk Analysis

Brute force attacks are the most common threat to SSH services. Attackers use automated tools to try many username and password combinations from a list. A server with a weak password can be broken into within minutes.

Real Example

# Example command used by attackers' brute force tools
hydra -l root -P passwords.txt ssh://192.168.1.100

Protection Strategies

Completely Disable Password Login

# Edit /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

Stronger Protection Measures

# Use fail2ban to automatically block attacking IPs
sudo apt install fail2ban
sudo systemctl enable fail2ban

# Configure /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

Advanced Protection Options

  • Change the default SSH port (e.g., to 2222) to reduce automated attacks
  • Use port knocking to hide the service port
  • Set up IP filtering rules based on geographic location

Private Key Security Management

Risk Level Assessment

If a private key is leaked, it's like losing a "master key" to all related servers—the damage can be very high.

Full Lifecycle Management for Private Keys

Secure Key Generation

# Use the safer Ed25519 algorithm
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/production_key

# Set a strong passphrase for the private key
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/encrypted_key

Safe Storage Measures

# Set correct file permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/authorized_keys

# Use ssh-agent to manage decrypted private keys
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/encrypted_key

Safe Usage Practices

  • Use different key pairs for different environments (development, testing, production)
  • Rotate keys regularly (recommended every 6-12 months)
  • Use a Hardware Security Module (HSM) to store private keys for high-security needs

Deep Protection Against Man-in-the-Middle Attacks

How the Attack Works

A Man-in-the-Middle (MitM) attack can happen when you first connect to a server. The attacker pretends to be the target server and tricks the user into accepting a fake host key.

Building a Protection System

Safe Verification on First Connection

# Check the fingerprint carefully
The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/rZkMzR/+ZZblpJgCaOOB8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Automated Verification

# Use SSHFP DNS records for automatic verification
ssh -o "VerifyHostKeyDNS=yes" user@hostname

# Pre-configure known host fingerprints
echo "github.com ssh-rsa AAAAB3NzaC1yc2E..." >> ~/.ssh/known_hosts

Enterprise-Level Solutions

  • Set up an internal Certificate Authority (CA) for host verification
  • Use SSH certificates instead of static key pairs
  • Enforce strict network access control policies

Complete Setup for Multi-Factor Authentication (MFA)

Why MFA is Needed

A single factor (like a password or key) is not enough if it gets leaked. MFA adds more layers: "something you know" (password), "something you have" (phone), and "something you are" (fingerprint).

Guide to Integrating Google Authenticator

Server-Side Configuration

# Install the Google Authenticator PAM module
sudo apt install libpam-google-authenticator

# Generate initial configuration
google-authenticator -t -d -f -r 3 -R 30 -W

SSH Service Configuration

# Edit /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

# Configure the PAM module
# /etc/pam.d/sshd
auth required pam_google_authenticator.so

Client-Side Experience

# Step-by-step verification during connection
ssh user@hostname
# 1. Public key authentication (automatic)
# 2. Enter the dynamic verification code
Verification code: 123456

Advanced MFA Options

  • Use U2F/WebAuthn hardware security keys
  • Integrate with an enterprise Single Sign-On (SSO) system
  • Implement risk-based dynamic authentication policies

Monitoring and Preventing SSH Tunnel Abuse

Abuse Scenarios

Attackers might misuse SSH tunnels to:

  • Bypass network restrictions to access internal services
  • Set up hidden command and control (C2) channels
  • Leak data (data exfiltration)

Detection and Monitoring Solutions

Network Layer Monitoring

# Monitor for unusual SSH connection patterns
netstat -tunp | grep :22
ss -tunp | grep sshd

# Use network traffic analysis tools
tcpdump -i any port 22 -w ssh_capture.pcap

Application Layer Protection

# Restrict port forwarding
# /etc/ssh/sshd_config
AllowTcpForwarding no
PermitOpen any:80    # Only allow forwarding to port 80
AllowStreamLocalForwarding no

# Restrict user permissions
Match User developer
    AllowTcpForwarding no
    PermitTTY no

Enterprise Security Policies

  • Use network micro-segmentation to limit the access range of SSH jump hosts
  • Deploy SSH session recording and auditing systems
  • Establish a baseline for normal SSH usage to detect unusual patterns

Other Security Improvements

Session Timeout and Idle Disconnect

# Prevent sessions from being misused
ClientAliveInterval 300
ClientAliveCountMax 2
TCPKeepAlive yes

User Access Control

# Restrict which users and groups can log in
AllowUsers admin deployer
AllowGroups ssh-users
DenyUsers root
DenyGroups developers

Enhanced Logging and Auditing

# Increase log detail level
LogLevel VERBOSE
SyslogFacility AUTH

# Monitor SSH login events in real time
tail -f /var/log/auth.log | grep sshd

By putting these layered security measures in place, you can build a strong defense system that greatly improves SSH service security. Remember, security is an ongoing process—regularly check and update your protection strategies.

Content

SSH: Past and Present The Telnet Problem The SSH Security Upgrade Protocol Improvement A Simple Guide to Using SSH Getting Ready Making a Remote Connection Moving Files Securely Port Forwarding Managing a Remote System How SSH Works Under the Hood Three-Layer Encryption System Smart Ways to Prove Your Identity The Art of Session Management The Magic Tunnel of Port Forwarding How SSH Works at the Protocol Level Potential SSH Security Risks and Advanced Protection Methods Weak Passwords and Brute Force Attacks Private Key Security Management Deep Protection Against Man-in-the-Middle Attacks Complete Setup for Multi-Factor Authentication (MFA) Monitoring and Preventing SSH Tunnel Abuse Other Security Improvements
Switch To PCThank you for visiting, but please switch to a PC for the best experience.