What is SSH?

What is SSH?

SSH, short for Secure Shell, is a cryptographic network protocol that allows secure communication between two networked devices. Originally developed by Tatu Ylönen in 1995 to replace insecure protocols like Telnet and rsh, SSH has become the standard for remote system administration and file transfer over potentially untrusted networks.

Unlike traditional remote protocols that transmit data in plaintext, SSH encrypts all traffic—ensuring confidentiality, integrity, and authenticity.


Core Features of SSH

FeatureDescription
Remote Shell AccessSecurely login and execute commands on a remote machine
Encrypted File TransferSecure copy (SCP) and SFTP allow safe file movement between hosts
Port ForwardingTunnel local or remote ports to access internal services
Strong AuthenticationSupports password, public/private key, and multi-factor authentication
Encrypted TunnelingEncrypts otherwise insecure traffic like HTTP, MySQL, or Redis

How SSH Works

SSH follows a client-server model, where the client initiates a connection to an SSH server. The connection process involves three main steps:

  1. Handshake: Negotiation of encryption algorithms and key exchange.
  2. Authentication: Verification using password or SSH keys.
  3. Session Establishment: Launch of an encrypted communication channel for data exchange.

The default port for SSH is 22, though many system administrators choose to change it for added security.


Common SSH Commands

Basic Remote Login

ssh user@hostname
# Example:
ssh root@192.168.1.10

Login on a Custom Port

ssh -p 2222 user@example.com

Login Using Private Key

ssh -i ~/.ssh/id_rsa user@remote_host

Secure File Copy (SCP)

scp localfile.txt user@remote_host:/home/user/

Local Port Forwarding

ssh -L 8080:localhost:80 user@remote_host
# Maps local port 8080 to remote port 80

Understanding SSH Key Pairs

SSH supports asymmetric cryptography using a key pair:

  • Private key: Stored on your local device. Keep this secure.
  • Public key: Placed in the remote server’s ~/.ssh/authorized_keys.

Generate SSH Key Pair

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

This will generate:

  • ~/.ssh/id_rsa (private key)
  • ~/.ssh/id_rsa.pub (public key)

Add Key to Server

Option 1: Use ssh-copy-id (recommended)

ssh-copy-id user@remote_host

Option 2: Manually append the public key to:

~/.ssh/authorized_keys

SSH Config File (~/.ssh/config)

For managing multiple connections easily, use the SSH config file:

Host myserver     HostName 192.168.1.10     User ubuntu     Port 2222     IdentityFile ~/.ssh/my_custom_key

Now connect using:

ssh myserver

Best Practices for SSH Security

  • Disable password authentication and use keys only
  • Change the default port from 22 to something less obvious
  • Use firewall rules (e.g., ufw) to restrict IP access
  • Enable fail2ban or sshguard to prevent brute-force attacks
  • Regularly rotate keys and enforce key passphrases
  • Enable two-factor authentication for critical access

Advanced SSH Techniques

Dynamic Proxy (SOCKS5)

ssh -D 1080 user@remote_host # Creates a local SOCKS proxy for encrypted browsing

Jump Hosts (ProxyJump)

ssh -J jump_host target_host # Connect through a bastion host to reach internal systems

Use in Automation Scripts

Combine SSH with shell scripting, cron jobs, or Ansible to automate system administration securely.


Final Thoughts

SSH is far more than just a tool for logging into servers. It’s a foundational technology for developers, system administrators, DevOps engineers, and cybersecurity professionals. Understanding SSH opens the door to advanced remote administration, secure communication, and even encrypted networking tunnels.


Additional Reading

Last modified on 2025-12-04 • Suggest an edit of this page
← Prev: Build note workflow using Obsidian and Calibre
Next: What Is a Computer Environment? →