Files
Documentation/Doc/Network/SSH.md
T
Shaz 42b8971744
Build and deploy Docusaurus / build-and-deploy (push) Successful in 1m1s
Add network & containerisation
2026-03-10 20:31:37 +01:00

3.9 KiB
Raw Blame History

SSH Basics

How SSH works, key-based authentication, the config file, and port forwarding.

For generic networking concepts, see:


1. What Is SSH?

SSH (Secure Shell) is a protocol for opening an encrypted remote session on another machine. It is used primarily to:

  • Open an interactive shell on a remote server.
  • Transfer files securely (scp, rsync over SSH, sftp).
  • Create encrypted tunnels for forwarding traffic.

SSH runs on port 22 by default (TCP). All communication is encrypted end to end.


2. Password vs Key-Based Authentication

2.1 Password Authentication

The simplest method: the client sends a username and password. The server verifies against its user database.

Drawbacks:

  • Vulnerable to brute-force attacks.
  • Must type a password every time.
  • Commonly disabled on hardened servers.

2.2 Key-Based Authentication

The client holds a private key (kept secret). The server holds the corresponding public key in ~/.ssh/authorized_keys.

Authentication process:

  1. The server sends a challenge that can only be answered by the holder of the private key.
  2. The client responds without ever transmitting the private key itself.
  3. The server grants access.

This is the recommended method:

  • No credential is transmitted over the network.
  • Easy to revoke: just remove the public key from the server.
  • The private key can be further protected by a local passphrase.
# Generate a key pair (ed25519 is the modern recommended algorithm)
ssh-keygen -t ed25519 -C "my-laptop"
# → creates ~/.ssh/id_ed25519 (private) and ~/.ssh/id_ed25519.pub (public)

# Copy the public key to a remote server
ssh-copy-id user@192.168.1.18

3. SSH Config File

The file ~/.ssh/config lets you define shortcuts and options per host, so you don't have to type them every time.

Host homeserver
    HostName 192.168.1.18
    User myuser
    IdentityFile ~/.ssh/id_ed25519
    Port 22

With this, ssh homeserver expands to the full connection automatically.

Option Purpose
HostName Real hostname or IP
User Login username
IdentityFile Path to the private key to use
Port SSH port if non-standard
ServerAliveInterval Send keepalive packets to avoid dropped idle connections

4. Port Forwarding and Tunnels

SSH can forward network traffic through the encrypted connection, acting as a lightweight alternative to a VPN.

4.1 Local Forwarding

Makes a port on the remote machine accessible locally:

ssh -L 8080:localhost:8096 homeserver
# localhost:8080 on your machine now reaches the server's port 8096

Useful for accessing a service on a remote machine without exposing it publicly.

4.2 Reverse Forwarding

Makes a local port accessible on the remote machine. Useful for reaching a machine that is behind NAT and cannot accept inbound connections directly.

4.3 Dynamic / SOCKS Proxy

ssh -D 1080 homeserver
# Creates a local SOCKS5 proxy — configure your browser to route traffic through localhost:1080

All proxied traffic goes via the server. A basic VPN alternative for browser traffic.


5. Hardening Notes

Common practices for securing an SSH server:

  • Disable password authentication (PasswordAuthentication no in /etc/ssh/sshd_config).
  • Disable root login (PermitRootLogin no).
  • Restrict to specific users with AllowUsers myuser.
  • Use a firewall to limit which source IPs can reach port 22.
  • Optionally move SSH to a non-standard port to reduce automated scanning noise (not a real security fix, but reduces log clutter).