🔐 What is SSH? A Deep Dive Into Secure Shell and SSH Keys

Jitendra KumarJitendra Kumar
5 min read

Ever seen developers or sysadmins typing mysterious commands into black terminal screens and instantly connecting to remote servers? 🤯

They’re probably using SSH—a powerful tool that helps you securely control a remote system without ever leaving your desk.

In this detailed guide, we’ll explore everything about SSH and SSH keys:

📘 What Is SSH? (Secure Shell Protocol)

🧩 Definition:

SSH, or Secure Shell, is a cryptographic network protocol that lets you securely log in and run commands on another computer over the internet.

SSH is used to control remote machines like:

  • 🌐 Web servers

  • 📦 Cloud environments (e.g., AWS, Azure, DigitalOcean)

  • 🧠 Raspberry Pi devices

  • 💼 Corporate servers or workstations

Instead of walking up to the server (which could be across the world), you just open a terminal and say:

ssh user@remote-server-ip

And boom—you’re in! 💥

🔓 Why SSH Over Other Methods?

Before SSH existed, we used insecure methods like:

  • Telnet – data sent in plain text (easily hacked)

  • FTP – file transfer with weak/no encryption

SSH replaced these with end-to-end encryption, meaning nobody—not even your ISP—can see your credentials or commands.

🎯 What Makes SSH So Powerful?

  • Authentication – Verifies who you are (password or SSH key)

  • Encryption – Protects the communication (AES, ChaCha20, etc.)

  • Integrity – Ensures data hasn’t been tampered with

It supports:

  • Remote command-line login

  • Secure file transfers (SCP, SFTP)

  • Port forwarding (secure tunnels)

  • Automation with scripts and cron jobs

🔐 What Are SSH Keys?

SSH keys are the modern, secure, and passwordless way to log into remote systems.

🧠 Think of It Like This:

  • Your public key = A padlock 🔓 you give to a friend (the server).

  • Your private key = The key 🔑 you keep safe at home.

When you try to connect, the server checks if your private key unlocks the padlock. If it does—you’re allowed in!

No password needed. ✔️

🧪 Types of SSH Key Algorithms (Explained)

When you generate SSH keys, you’re asked to choose a “type” of key. These are different cryptographic algorithms.

Let’s explore the 3 main ones:

1️⃣ RSA (Rivest–Shamir–Adleman)

  • 🔹 Most widely supported

  • 🔹 Slower but very reliable

  • 🔹 Good for compatibility with older systems

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

Flags explained:

  • -t rsa: Algorithm type

  • -b 4096: Key size (higher = more secure)

  • -C: Comment to identify the key (like your email)

2️⃣ ED25519 (Modern Default)

  • ✅ Recommended for most users

  • ✅ Faster, smaller, more secure

  • ✅ Requires modern SSH server (OpenSSH 6.5+)

ssh-keygen -t ed25519 -C "your_email@example.com"
  • No need to specify key size—ED25519 uses fixed strength.

3️⃣ ECDSA (Elliptic Curve DSA)

  • 🔹 Faster than RSA

  • 🔹 Less secure than ED25519

  • 🔹 Can be used for special hardware like smart cards

ssh-keygen -t ecdsa -b 521 -C "your_email@example.com"

⚠️ Note: ED25519 is generally better and safer for everyday use.

🛠️ How to Generate SSH Keys (Full Tutorial)

✅ Step 1: Open Your Terminal

On macOS/Linux, just launch the Terminal.
On Windows, use Git Bash or PowerShell with OpenSSH enabled.

✅ Step 2: Generate SSH Key Pair

ssh-keygen -t ed25519 -C "your_email@example.com"

You’ll see:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):

Press Enter to save it in the default location.

Then:

Enter passphrase (empty for no passphrase):

Enter a secure passphrase (optional but highly recommended). 🔐

Now you’ll have:

  • ~/.ssh/id_ed25519 → Your private key (keep secret!)

  • ~/.ssh/id_ed25519.pub → Your public key (share with server)

✅ Step 3: Copy Public Key to Server

If your remote server supports ssh-copy-id:

ssh-copy-id username@remote-server-ip

OR, copy manually:

cat ~/.ssh/id_ed25519.pub

Paste the contents into this file on the server:

~/.ssh/authorized_keys

Make sure the file and folder permissions are set:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

✅ Step 4: Connect Using SSH Key

Now you can connect securely:

ssh username@remote-server-ip

🎉 You should no longer need a password!

🧠 Bonus: SSH Config File for Multiple Servers

Managing many servers? Use ~/.ssh/config to make life easier:

Host myproject
    HostName 192.168.1.100
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

Then connect with:

ssh myproject

🔐 Advanced: Disable Password Login for Extra Security

Once SSH keys are working, lock down your server by disabling passwords:

  1. Edit config:
sudo nano /etc/ssh/sshd_config
  1. Set:
PasswordAuthentication no
PubkeyAuthentication yes
  1. Restart SSH:
sudo systemctl restart ssh

⚠️ Make sure your key login works before you do this, or you may get locked out.

🔧 SSH Key Management Tips

  • 🔑 Always use a passphrase for private keys

  • 🔄 Rotate keys regularly (every 6–12 months)

  • 🧑‍🤝‍🧑 Use different keys for each device or service

  • 🧯 Back up your private key securely (e.g., encrypted USB drive)

  • 🔎 Use ssh-add and ssh-agent to manage keys on your session

🛠️ Common SSH Errors (and Fixes)

ErrorFix
Permission denied (publickey)Check file permissions (600/700), and correct username
Connection timed outCheck server IP and firewall rules
Too many authentication failuresUse -i keyfile or configure ~/.ssh/config

🧭 Final Thoughts: Why Mastering SSH Matters

SSH is the gateway to the cloud. Whether you’re managing a tiny Raspberry Pi or a thousand AWS instances, SSH gives you total control—securely, reliably, and efficiently.

By mastering SSH keys, you:

  • 💡 Eliminate weak passwords

  • 💻 Automate scripts securely

  • 🔒 Protect your infrastructure from intrusions

🚀 Summary: What You Now Know

  • ✅ What SSH is and how it works

  • ✅ Difference between password and key-based logins

  • ✅ Types of SSH keys (RSA, ED25519, ECDSA)

  • ✅ How to generate and use SSH keys step by step

  • ✅ How to harden your server for production

  • ✅ Common errors and fixes

0
Subscribe to my newsletter

Read articles from Jitendra Kumar directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Jitendra Kumar
Jitendra Kumar