🟢 Beginner

SSH — Bezpečný vzdialený prístup

SSH (Secure Shell) je kryptografický protokol na bezpečnú komunikáciu medzi počítačmi. Je to základný nástroj každého DevOps inžiniera — bez SSH sa nedostaneš na žiadny server.


Ako SSH funguje?

SSH používa asymetrickú kryptografiu (public/private key pair) na autentifikáciu a symetrickú šifru na prenos dát. Štandardný port je 22/TCP.

# Základné pripojenie
ssh user@server.example.com

# Pripojenie na iný port
ssh -p 2222 user@server.example.com

# Pripojenie s konkrétnym kľúčom
ssh -i ~/.ssh/id_ed25519 user@server.example.com

SSH kľúče a authorized_keys

Password autentifikácia je slabá. Vždy používaj kľúče:

# Generovanie Ed25519 kľúča (odporúčaný)
ssh-keygen -t ed25519 -C "moj@email.com"

# Kopírovanie verejného kľúča na server
ssh-copy-id user@server.example.com

# Manuálne pridanie do authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

SSH konfigurácia (~/.ssh/config)

Konfiguračný súbor šetrí čas a zjednodušuje pripojenia:

Host production
    HostName 10.0.1.50
    User deploy
    Port 2222
    IdentityFile ~/.ssh/prod_key

Host staging
    HostName 10.0.2.50
    User deploy
    ProxyJump bastion

Tunely a port forwarding

SSH tunely umožňujú bezpečný prístup k službám za firewallom:

# Local port forwarding — pristúpiš na lokálny port, prenesie sa na remote
ssh -L 8080:localhost:3000 user@server

# Remote port forwarding — remote port smeruje na lokálnu službu
ssh -R 9090:localhost:8080 user@server

# Dynamic SOCKS proxy
ssh -D 1080 user@server

Jump hosty (Bastion)

V produkčných prostrediach sa na servery pristupuje cez bastion host:

# Priame použitie jump hosta
ssh -J bastion@jump.example.com user@internal-server

# Alebo v config súbore
Host internal-*
    ProxyJump bastion

Hardening — Zabezpečenie SSH

Úpravy v /etc/ssh/sshd_config:

# Zakázať root login
PermitRootLogin no

# Zakázať password autentifikáciu
PasswordAuthentication no

# Povoliť len konkrétnych používateľov
AllowUsers deploy admin

# Zmeniť port (security through obscurity, ale pomáha)
Port 2222

# Idle timeout
ClientAliveInterval 300
ClientAliveCountMax 2

Po zmene vždy reštartuj: systemctl restart sshd

Best Practices

  • Vždy Ed25519 kľúče — rýchlejšie a bezpečnejšie ako RSA
  • Zakázať password login — eliminuje brute-force útoky
  • Používať jump hosty — žiadny priamy prístup na interné servery
  • Fail2ban — automatické blokovanie po neúspešných pokusoch
  • SSH agent forwarding opatrnessh -A len keď naozaj treba
  • Pravidelná rotácia kľúčov — minimálne raz ročne

SSH je brána do tvojej infraštruktúry — zabezpeč ju ako prvú vec.