Secure Shell (SSH): Concept, Best Practices and Troubleshooting Issues

Secure Shell (SSH) Concept, Best Practices and Troubleshooting Issues

What is Secure Shell (SSH)?

Secure Shell (SSH) is a network protocol used primarily for secure remote login and data communication between two networked computers. It encrypts the data transmitted over the network, thus providing a shield against eavesdropping, data breaches, and other security vulnerabilities.

Origin and History

  • Development: SSH was initially developed by Tatu Ylönen in 1995 as a response to a password-sniffing attack at his university.
  • Protocols: Two major versions exist—SSH-1 and SSH-2. SSH-2 is an improvement over SSH-1, offering enhanced security features.VersionYearSecurity FeaturesSSH-11995Basic encryptionSSH-22006Enhanced security


SSH serves multiple purposes in the realm of network security:

Secure Shell Key Concepts

Public and Private Keys

Explanation of Asymmetric Encryption

In the realm of SSH, asymmetric encryption plays a crucial role. Here, two keys are involved:

  • Public Key: For encryption
  • Private Key: For decryption

Asymmetric encryption ensures that even if someone intercepts the public key, they can’t reverse-engineer the private key.

Generating SSH Keys

SSH keys can be generated using various algorithms, the most common being RSA, DSA, and ECDSA.

  • RSA: Most widely used, offers high security
  • DSA: Faster but less secure than RSA
  • ECDSA: A newer approach, efficient and secure

To generate an SSH key, you can use the ssh-keygen command:

ssh-keygen -t rsa -b 4096
  • -t: Specifies the type of key to create (e.g., RSA)
  • -b: Specifies the key length (e.g., 4096 bits for high security)

Host and Client Configuration

/etc/ssh/ and ~/.ssh/

Configuration for SSH occurs in two main directories:

  • /etc/ssh/: Holds system-wide configuration files like sshd_config.
  • ~/.ssh/: Contains user-specific configuration and key files.

Important Flags and Parameters

In configuring SSH, particular flags and parameters play significant roles:

  • Port: Specifies the port SSH listens on (Default is 22)
  • PermitRootLogin: Controls root access (Usually set to no for security)
  • PasswordAuthentication: Determines if password authentication is allowed (Disabled if using keys)

Secure Shell Agents

Role and Purpose

An SSH Agent is a program that runs in the background to manage your keys. It helps you connect to servers without needing to type your passphrase repeatedly.

How to Use ssh-agent

Initialization and key addition are straightforward:

  1. Start the agent: eval $(ssh-agent -s)
  2. Add your SSH key: ssh-add ~/.ssh/id_rsa

Forwarding with ssh-add

Key Forwarding allows you to use your local SSH keys on a remote server. You can enable it with:

ssh-add -L

Secure File Transfer with Secure Shell

SCP (Secure Copy Protocol)

Basic Syntax and Usage

SCP stands for Secure Copy Protocol. It’s a network protocol that supports file transfer between networked hosts. The basic syntax is as follows:

scp [options] [source] [destination]
  • source: The file or directory to transfer
  • destination: Where to place the file on the target system

SCP Flags

Commonly used flags in SCP include:

  • -r: Recursive copy, for directories
  • -p: Preserves timestamps
  • -C: Enables compression


scp -r -p -C /local/directory/ user@remote:/remote/directory/

Limitations compared to SFTP

While SCP is straightforward and fast, it has limitations:

  • No built-in file browsing
  • Less granular control over transfers

SFTP (SSH File Transfer Protocol)

Introduction and advantages over SCP

SFTP, or SSH File Transfer Protocol, offers more features than SCP. Key advantages include:

  • Built-in file browsing
  • Ability to resume interrupted transfers
  • Granular file permissions

Common Commands

In an SFTP session, you will find these commands helpful:

  • put: Upload files
  • get: Download files
  • ls: List files in the directory
  • cd: Change directory

Interactive vs Batch Mode

SFTP can be used in two modes:

  • Interactive Mode: Commands are typed in a terminal session
  • Batch Mode: Commands are pre-written in a file and executed in sequence

To use batch mode:

sftp -b batchfile.txt user@remote

Advanced Secure Shell Techniques

Port Forwarding

Local vs Remote Port Forwarding

Port Forwarding allows you to route specific network traffic through your SSH connection, enhancing the security of the data. There are two primary types:

  • Local Port Forwarding: Routes local network traffic to a remote machine.
ssh -L local_port:remote_address:remote_port user@ssh_server
  • Remote Port Forwarding: Exposes a local service to the internet through the Secure Shell server.
ssh -R remote_port:local_address:local_port user@ssh_server

Dynamic Port Forwarding

This technique allows your SSH server to behave like a SOCKS proxy.

ssh -D local_port user@ssh_server

Use Cases

Port forwarding can be beneficial for:

  • Tunneling application traffic securely.
  • Database connections: Accessing a database securely via SSH.

SSH Multiplexing

Concept of reusing Secure Shell connections

SSH Multiplexing is the practice of reusing an existing SSH connection for multiple SSH sessions, reducing the overhead of creating a new connection each time.

Configuring .ssh/config for Multiplexing

You can enable multiplexing by editing your ~/.ssh/config file:

Host *
  ControlMaster auto
  ControlPath ~/.ssh/multiplex-%r@%h:%p
  ControlPersist 10m
  • ControlMaster: Enables the sharing of multiple sessions over a single network connection.
  • ControlPath: Specifies the pathname of the control socket.
  • ControlPersist: How long the master connection stays alive without sessions.

Secure Shell Tunneling

What is SSH Tunneling?

SSH Tunneling, also known as SSH port forwarding, is a method to secure the data traffic of any given TCP/IP application using an Secure Shell connection.

Types of Tunnels

  • Local Tunnel: Encrypts routes leading from the local machine to the SSH server.
  • Remote Tunnel: Routes from the Secure Shell server to the local machine are encrypted.
  • Dynamic Tunnel: More flexible, acts like a SOCKS proxy.

Security Implications

While convenient, SSH tunneling should be used judiciously as it can:

  • Bypass network policies and firewalls: This could lead to security risks if misconfigured.

SSH Jump Hosts

Definition and Use Cases

An Secure Shell Jump Host acts as an intermediary between your machine and a target server. It’s beneficial for:

  • Bypassing firewalls: When you can’t directly access the target server.
  • NAT traversal: If the target server is behind a NAT.


You can use the ProxyJump directive or -J flag for this:

ssh -J user@jumphost user@target

Or in your ~/.ssh/config:

Host target
  HostName target_address
  ProxyJump user@jumphost

Security Best Practices

Key Rotation and Management


Key Rotation is the practice of retiring an old key and replacing it with a new one. This is crucial for:

  • Preventing Unauthorized Access: Reducing the risk of an old key being misused.
  • Compliance: Meeting security standards and regulations.


Effective key management involves several best practices:

  • Regular Updates: Rotate keys at a regular interval.
  • Auditing: Keep logs and regularly check for any unauthorized or suspicious activities.
  • Removal of Obsolete Keys: Remove keys that are no longer in use or associated with inactive personnel.

Two-factor authentication (2FA)

What is 2FA?

Two-Factor Authentication (2FA) adds an extra layer of security by requiring two methods of verification before granting access.

Implementation with SSH

Enabling 2FA with SSH can be achieved through various methods, such as:

  • PAM modules: Pluggable Authentication Modules for integrating 2FA.
  • Hardware Tokens: Physical devices that generate authentication codes.

Hardening SSH

Minimize Open Ports

One basic yet effective strategy for hardening Secure Shell is to minimize the number of open ports. You can do this by changing the default SSH port and allowing only essential services.

Fail2ban Implementation

Fail2ban is a tool that scans log files for malicious activities and bans IPs showing signs of attack. It can be used to:

  • Block Multiple Failed Login Attempts: Thus mitigating brute-force attacks.
  • Temporary or Permanent Bans: Depending on the severity and frequency of the suspicious activity.

Host-based and User-based Security Measures

Other hardening measures involve both host-based and user-based configurations:

  • Host-based: Implement IP whitelisting, disable root login, and set strong password policies.
  • User-based: Enforce the use of strong passphrases for SSH keys and educate users about phishing attacks.

SSH Use-Cases and Applications

Remote System Administration

Why It’s Widely Used

SSH is often the go-to solution for remote system administration due to:

  • Security: All communication is encrypted.
  • Flexibility: Supports a wide range of tasks, from running commands to transferring files.

Common Commands for Administration

Here are some useful SSH commands in this context:

  • ssh user@host: Basic login
  • ssh -t user@host 'command': Run a single command on a remote server
  • scp localfile user@host:remotefile: Copy a file to a remote server

Data Tunneling and VPN

What is Data Tunneling?

Data Tunneling refers to encapsulating one type of protocol within another. In SSH, this is often done to secure unencrypted traffic.


Secure Shell can serve as a simplified Virtual Private Network (VPN) by forwarding all traffic over the encrypted tunnel:

ssh -w 0:1 user@host

-w 0:1: Specifies tunnel interfaces for VPN.

DevOps and Automation

Use in CI/CD Pipelines

SSH plays a crucial role in Continuous Integration and Continuous Deployment (CI/CD) pipelines. It allows:

  • Automated Deployment: Scripts can Secure Shell into servers to pull the latest codebase.
  • Testing: Run remote test suites through SSH commands.

Secure Shell with Configuration Management Tools

SSH can integrate with tools like Ansible, Chef, and Puppet for automated configuration and deployment.

  • Ansible: Uses SSH to push changes and execute commands on remote servers.
  • Chef/Puppet: While they primarily use their agents, Secure Shell can be used for initial setup and ad-hoc tasks.

Database Connectivity

Securing DB Connections

SSH can secure database connections by forwarding the DB port over an encrypted tunnel:

ssh -L local_port:db_server:db_port user@ssh_server
  • local_port: Local machine port
  • db_server: Database server address
  • db_port: Database port

Use in Cloud Environments

In cloud environments like AWS, GCP, or Azure, SSH is commonly used for:

  • Accessing Managed Databases: Cloud providers often restrict direct DB access over the internet, making SSH tunneling a secure alternative.

SSH Tools and Utilities

SSH Clients


OpenSSH is the most popular and open-source Secure Shell client, commonly pre-installed on many UNIX-based systems.

  • Command-Line Interface: Provides extensive control options.
  • Cross-Platform: Available for Linux, macOS, and even Windows via WSL (Windows Subsystem for Linux).


PuTTY is another widely used SSH client, particularly popular among Windows users.

  • Graphical Interface: Makes it user-friendly.
  • Session Management: Allows saving and loading of different sessions.


MobaXterm offers an advanced terminal for Windows with an X11 server, a tabbed SSH client, and several other network tools.

  • Built-in SFTP: Drag and drop file transfers.
  • Multi-Session: Supports SSH, RDP, SFTP, and more.

SSH Servers

OpenSSH Server

OpenSSH Server is the counterpart to the OpenSSH client, providing the Secure Shell protocol service.

  • Configurable: Via the /etc/ssh/sshd_config file.
  • Security: Supports various encryption algorithms and authentication methods.

Dropbear SSH Server

Dropbear is a lightweight alternative to OpenSSH, useful for embedded systems.

  • Small Footprint: Consumes less memory and processing power.
  • Fast Deployment: Easy to set up and get running.

Monitoring and Management Tools


ssh-audit is a tool for auditing various types of SSH servers.

  • Vulnerability Checks: Tests for various known vulnerabilities and weaknesses.
  • Compliance Checks: Verifies whether the server meets certain security criteria.


SSHGuard protects hosts from brute-force attacks against Secure Shell and other services.

  • Log-Based: Monitors logs to identify malicious activity.
  • Blocking: Bans offending IPs via firewall rules.

SSH Libraries and SDKs


Paramiko is a Python library for SSH2, providing both client and server functionality.

  • Scripting Capabilities: Ideal for automating SSH-related tasks in Python.
  • SFTP Support: Provides secure file transfer capabilities.


libssh is a multiplatform C library that implements the Secure Shell protocol.

  • Broad Support: Supports Linux, Windows, and macOS.
  • Full-Featured: Provides both server and client-side functionalities.

Troubleshooting Secure Shell (SSH) Issues

Connection Timeouts

Identifying the Problem

Connection timeouts can occur for several reasons, including network issues and firewall restrictions.

  • Ping the Server: Use ping to check basic network connectivity.
  • Check Port Accessibility: Use telnet or nc to see if the SSH port is open.


  • Check Firewall Rules: Ensure the firewall is configured to allow SSH traffic.
  • Review SSH Config: The /etc/ssh/sshd_config file might have incorrect settings.

Permission Denied Errors

Reasons for Occurrence

Common reasons include:

  • Wrong Username/Password
  • SSH Key Mismatch
  • Insufficient File Permissions


  • Check Credentials: Ensure the username and password or Secure Shell keys are correct.
  • File Permissions: Make sure the ~/.ssh directory and its files have proper permissions.

Host Authentication Failures

Identifying the Issue

Errors like “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!” indicate issues with the host keys.


  • Manual Key Verification: Use ssh-keygen -F hostname to find the stored key and compare it with the server’s public key.
  • Key Regeneration: Delete and regenerate the keys on the server using ssh-keygen.

High Latency and Slow Connections

Causes and Identification

High latency can be due to:

  • Network Congestion
  • Inefficient Algorithms


  • Algorithm Optimization: You can specify more efficient ciphers in your SSH config.
  • Disable DNS Lookup: Disabling the reverse DNS lookup can sometimes improve connection speed.

SSH Agent Issues

Common Problems

Problems can arise due to:

  • Agent Not Running
  • Keys Not Added


  • Start SSH Agent: Use eval $(ssh-agent -s) to start the agent in the background.
  • Add Keys: Use ssh-add ~/.ssh/your_key to add the necessary keys to the agent.

SSH Protocol Internals and Cryptography

SSH Protocol Architecture

Layers in Secure Shell Protocol

SSH protocol typically operates on three layers:

  • Transport Layer: Responsible for server authentication, data integrity, and confidentiality.
  • User Authentication Layer: Manages client authentication.
  • Connection Layer: Multiplexes the encrypted tunnel into several logical channels.

Key Exchanges and Algorithms

The SSH protocol employs a variety of cryptographic algorithms, such as:

  • RSA and DSA for public key cryptography
  • AES and 3DES for symmetric encryption

SSH Cryptographic Processes

Symmetric vs Asymmetric Encryption


  • Symmetric Encryption is used for encrypting the data payload.
  • Asymmetric Encryption is used for the key exchange mechanism and user authentication.

Hashing Functions in SSH

Hashing functions like SHA-1 or SHA-256 are used for data integrity verification.

Session Establishment

Steps for Connection

The session establishment process involves:

  1. Handshake
  2. Server Authentication
  3. Key Exchange
  4. Client Authentication
  5. Channel Establishment

Key Re-exchange

The keys used for encryption and integrity are usually set to expire after a certain data threshold or time limit.

SSH File Formats

Various File Types

Several file types are used in SSH, including:

  • .pem: Privacy Enhanced Mail, used for storing cryptographic keys.
  • .pub: Public key files.
  • known_hosts: Contains the public keys of remote hosts.

Secure Storage

Keys should be securely stored, and measures like encrypted file systems can be employed for added security.

Security Risks in SSH Protocol

Man-in-the-Middle Attacks

Even though SSH is secure, it is susceptible to Man-in-the-Middle (MitM) attacks during the initial handshake.


  • Host Key Verification: Always verify the server’s fingerprint when connecting for the first time.