Kompletní průvodce nastavením SSH na Ubuntu: instalace, zpevnění zabezpečení, pokročilá konfigurace a řešení problémů

目次

1. Úvod

Konfigurace SSH na Ubuntu je nezbytná pro správu vzdálených serverů. SSH (Secure Shell) je protokol, který poskytuje bezpečné šifrované spojení, umožňující uživatelům přistupovat k serverům vzdáleně, spouštět příkazy a přenášet soubory.

Tento článek vysvětluje, jak konfigurovat SSH na Ubuntu, od základních kroků instalace po pokročilé bezpečnostní opatření.

1.1 Proč konfigurovat SSH na Ubuntu?

1.1.1 Co je SSH?

SSH (Secure Shell) je protokol, který umožňuje bezpečné spojení přes síť. Běžně se používá pro přihlášení do vzdálených serverů, přenos souborů a tunelování (předávání portů). Na rozdíl od tradičního Telnetu nebo FTP šifruje SSH veškerou komunikaci, což poskytuje silnou bezpečnost.

1.1.2 Kdy je SSH potřeba na Ubuntu

Běžné scénáře, kde se SSH používá pro vzdálenou správu Ubuntu, zahrnují:

  • Správa cloudových serverů : Linuxové servery na AWS, GCP, Vultr a dalších se obvykle přistupují přes SSH.
  • Vzdálené operace v prostředích LAN : Přístup k interním serverům nebo vývojovým strojům vzdáleně.
  • Správa zařízení IoT : Ovládání vestavěných systémů, jako je Raspberry Pi, vzdáleně.

Ve výchozím nastavení je SSH server na Ubuntu vypnutý, takže jej musí být ručně nainstalován a nakonfigurován pro povolení přístupu přes SSH.

2. Základní konfigurace SSH

Pro použití SSH na Ubuntu musíte nainstalovat SSH server (OpenSSH) a správně jej nakonfigurovat. Tato sekce vysvětluje, jak nainstalovat SSH, upravit základní nastavení, nakonfigurovat firewall a připojit se k serveru.

2.1 Instalace a spuštění OpenSSH

2.1.1 Co je OpenSSH?

OpenSSH (Open Secure Shell) je open-source implementace protokolu SSH. Podporuje vzdálená připojení, bezpečný přenos souborů (SCP a SFTP) a předávání portů.

2.1.2 Instalace OpenSSH

Ubuntu neobsahuje SSH server ve výchozím nastavení, takže jej nainstalujte pomocí příkazu níže:

sudo apt update && sudo apt install -y openssh-server

Tento příkaz aktualizuje seznamy balíčků a nainstaluje OpenSSH server.

2.1.3 Spuštění SSH a povolení automatického spuštění

Po instalaci spusťte SSH server a povolte automatické spuštění:

sudo systemctl enable --now ssh

Možnost enable zajišťuje, že se SSH spustí automaticky při bootování OS.

2.1.4 Kontrola stavu SSH

Ověřte, zda SSH běží:

systemctl status ssh

Pokud výstup ukazuje active (running), SSH funguje normálně:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

Pokud ukazuje inactive (dead) nebo failed, spusťte SSH ručně:

sudo systemctl start ssh

2.2 Konfigurace firewallu (UFW)

Ubuntu obsahuje jednoduchý firewall nazvaný ufw (Uncomplicated Firewall). Musíte povolit připojení SSH přes něj.

2.2.1 Kontrola stavu UFW

sudo ufw status

Příklad výstupu (neaktivní):

Status: inactive

Příklad výstupu (aktivní):

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Povolení SSH

sudo ufw allow ssh

Nebo explicitně:

sudo ufw allow 22/tcp

2.2.3 Povolení UFW

sudo ufw enable

2.2.4 Ověření pravidel UFW

sudo ufw status verbose

Příklad:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

2.3 Základní metody připojení SSH

Jakmile SSH běží, připojte se z klientského stroje.

2.3.1 Připojení z Linuxu/macOS

ssh username@server-ip-address

Příklad:

ssh user@192.168.1.100

Při prvním připojení se může zobrazit bezpečnostní varování:

.

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

Zadejte yes pro pokračování.

2.3.2 Připojení z Windows

Můžete použít PowerShell nebo PuTTY.

Použití PowerShell (Windows 10+ obsahuje SSH):

ssh username@server-ip-address

Použití PuTTY:

  1. Stáhněte PuTTY z oficiální stránky
  2. Otevřete PuTTY a zadejte IP serveru do pole Host Name (or IP address)
  3. Vyberte SSH jako typ připojení
  4. Klikněte na Open a přihlaste se

Závěr

Tato sekce pokrývá základy nastavení SSH na Ubuntu:

  • Jak nainstalovat a spustit OpenSSH
  • Jak povolit SSH připojení pomocí UFW
  • Jak se připojit z Linux/macOS a Windows

3. Posílení zabezpečení SSH

SSH je výkonný, ale ponechání výchozích nastavení zvyšuje bezpečnostní rizika. Útočníci často provádějí útoky hrubou silou nebo skenování portů. Posílení zabezpečení SSH je nezbytné.

3.1 Zakázat přihlášení root

Přihlášení jako root poskytuje plnou kontrolu nad systémem a je hlavním cílem útočníků. Jeho zakázání zvyšuje bezpečnost.

3.1.1 Kroky

  1. Upravit konfigurační soubor SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Změnit řádek na:
    PermitRootLogin no
    
  1. Restartovat SSH:
    sudo systemctl restart ssh
    
  1. Ověřit změnu:
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Pokud výstup je PermitRootLogin no, nastavení bylo aplikováno.

3.2 Zakázat ověřování heslem a použít ověřování klíčem

Ověřování pomocí veřejného klíče je bezpečnější než hesla a snižuje riziko útoků hrubou silou.

3.2.1 Vytvoření SSH klíčů

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Tím se vytvoří dva soubory:

  • id_rsa (soukromý klíč) — uchovávejte lokálně, nesdílejte
  • id_rsa.pub (veřejný klíč) — nahrajte na server

3.2.2 Nahrání veřejného klíče

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

3.2.3 Zakázání ověřování heslem

sudo nano /etc/ssh/sshd_config

Upravit:

PasswordAuthentication no

Restartovat SSH:

sudo systemctl restart ssh

3.3 Povolit SSH přístup pouze konkrétním uživatelům

Pro zvýšení zabezpečení SSH můžete omezit přístup tak, aby se mohli přihlásit jen vybraní uživatelé.

3.3.1 Krok konfigurace

  1. Otevřít konfigurační soubor SSH /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Přidat uživatele, kteří mají mít přístup přes SSH:
    AllowUsers username1 username2
    
  1. Restartovat SSH pro aplikaci nastavení:
    sudo systemctl restart ssh
    

3.4 Změna SSH portu

Protože port 22 je často cílem útočníků, změna výchozího portu může zvýšit bezpečnost.

3.4.1 Krok konfigurace

  1. Otevřít konfigurační soubor SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Upravit nastavení portu, např.:
    Port 2200
    
  1. Restartovat SSH:
    sudo systemctl restart ssh
    

3.4.2 Aktualizace nastavení firewallu

Pokud změníte port, aktualizujte UFW:

sudo ufw allow 2200/tcp

Zkontrolovat nové pravidlo:

sudo ufw status

3.5 Zabránit útokům hrubou silou pomocí Fail2Ban

Fail2Ban detekuje neúspěšné pokusy o přihlášení a blokuje útočící IP adresu na určenou dobu.

3.5.1 Instalace Fail2Ban

sudo apt install fail2ban -y

3.5.2 Vytvoření konfiguračního souboru

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Otevřít soubor:

sudo nano /etc/fail2ban/jail.local

Upravit nastavení:

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Restart Fail2Ban

sudo systemctl restart fail2ban

3.5.4 Zkontrolovat seznam blokací

sudo fail2ban-client status sshd

Závěr

Tato sekce vysvětlila metody pro zvýšení zabezpečení SSH:

.

  • Zakázat přihlášení roota
  • Zakázat ověřování heslem a povolit ověřování klíčem
  • Omezit přístup SSH na konkrétní uživatele
  • Změnit port SSH
  • Použít Fail2Ban k blokování neautorizovaných pokusů

Implementace těchto nastavení pomáhá vytvořit bezpečné prostředí SSH.

4. Pokročilá konfigurace SSH

Jakmile je dokončena základní konfigurace SSH a zabezpečení, můžete přejít na pokročilé funkce pro lepší flexibilitu a bezpečnost. Tato sekce pokrývá správu ssh.socket (Ubuntu 22.10+), SSH tunely, naslouchání na více portech a řízení přístupu na základě IP.

4.1 Použití ssh.socket v Ubuntu 22.10+

V Ubuntu 22.10+ může být SSH spravováno pomocí ssh.socket místo ssh.service. Aktivace na základě socketu spouští SSH jen když je potřeba, čímž šetří systémové prostředky.

4.1.1 Zkontrolujte stav ssh.socket

sudo systemctl status ssh.socket

Příklad výstupu (povoleno):

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 Povolit nebo zakázat ssh.socket

Povolit socket:

sudo systemctl enable --now ssh.socket

Přepnout zpět na klasický ssh.service:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 SSH tunelování (přesměrování portů)

SSH tunelování vytváří zabezpečené komunikační kanály mezi lokálními a vzdálenými systémy.

4.2.1 Lokální přesměrování portu

Užitečné pro bezpečné připojení k vzdáleným databázím nebo interním službám.

Příklad: Přístup ke vzdálenému MySQL serveru na portu 3306

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Reverzní přesměrování portu

Zveřejnit lokální služby přes vzdálený server.

Příklad: Publikovat lokální webový server na vzdáleném portu 8080

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Dynamické přesměrování portu (SOCKS proxy)

Použijte SSH jako SOCKS proxy pro anonymní prohlížení.

ssh -D 1080 username@server-ip-address

4.3 Naslouchání na více portech

SSH může naslouchat na více než jednom portu pro flexibilitu v různých síťových prostředích.

4.3.1 Kroky konfigurace

  1. Upravit /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Přidat více řádků Port:
    Port 22
    Port 2200
    
  1. Restartovat SSH:
    sudo systemctl restart ssh
    
  1. Povolit nový port pomocí UFW:
    sudo ufw allow 2200/tcp
    

4.4 Povolit SSH pouze z konkrétních IP adres

Omezení přístupu SSH podle IP adresy poskytuje silnou bezpečnostní kontrolu.

4.4.1 Konfigurace /etc/hosts.allow

sudo nano /etc/hosts.allow

Přidat povolenou IP adresu:

sshd: 192.168.1.100

4.4.2 Konfigurace /etc/hosts.deny

sudo nano /etc/hosts.deny

Zakázat všechny ostatní:

sshd: ALL

Závěr

Tato sekce pokrývala témata pokročilé konfigurace SSH:

  • Správa ssh.socket v Ubuntu 22.10+
  • Používání SSH tunelů (přesměrování portů)
  • Naslouchání na více SSH portech
  • Omezení přístupu SSH na konkrétní IP adresy

Aplikace těchto konfigurací zvyšuje jak bezpečnost, tak použitelnost.

5. Řešení problémů s SSH

I při správné konfiguraci mohou SSH připojení občas selhat. Tato sekce vysvětluje běžné problémy SSH a jejich řešení.

5.1 Když se SSH nemůže připojit

Pokud SSH vrátí Connection refused nebo vyprší čas, možné příčiny zahrnují problémy se službou, špatnou konfiguraci portu nebo omezení firewallu.

5.1.1 Služba SSH neběží

sudo systemctl status ssh

Řešení:

  • Pokud je inactive nebo failed, restartujte SSH:
    sudo systemctl restart ssh
    
  • Povolit automatické spouštění:
    sudo systemctl enable ssh
    

5.1.2 Port SSH není otevřen

ssh -p 2200 username@server-ip-address

Zkontrolujte otevřené porty:

sudo netstat -tulnp | grep ssh

Nebo:

ss -tulnp | grep ssh

5.1.3 Firewall (UFW) blokující SSH

sudo ufw status

Povolit SSH:

sudo ufw allow 22/tcp

Pokud používáte vlastní port:

sudo ufw allow 2200/tcp

5.2 Chyby ověřování

5.2.1 Nesprávné uživatelské jméno nebo heslo

ssh username@server-ip-address

5.2.2 Veřejný klíč není správně nainstalován

cat ~/.ssh/authorized_keys

Ověřte, že odpovídá lokálnímu id_rsa.pub.

5.2.3 Nesprávná oprávnění adresáře .ssh

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

Také zajistěte:

chmod 755 /home/username

5.3 Nestabilní SSH připojení nebo neočekávané odpojení

5.3.1 Úprava ClientAliveInterval

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

5.3.2 Úprava nastavení lokálního klienta

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Prohlížení SSH logů

5.4.1 Zobrazení logů v reálném čase

sudo journalctl -u ssh -f

5.4.2 Zobrazení starších logů

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

Závěr

Tato sekce vysvětlila běžné problémy se SSH a jak je řešit:

  • Zkontrolujte, zda běží služba SSH
  • Ověřte otevřené porty
  • Zkontrolujte nastavení firewallu
  • Zajistěte správné ověřování klíčem
  • Opravte problémy s časovým limitem a odpojením
  • Analyzujte SSH logy

Většina problémů se SSH vzniká z nesprávné konfigurace nebo síťových omezení. Použijte tyto kroky pro odstraňování problémů k efektivnímu řešení.

6. Často kladené otázky (FAQ)

Tato sekce odpovídá na běžné otázky týkající se používání a konfigurace SSH.

6.1 Jak opravit problémy s časovým limitem SSH?

6.1.1 Nastavení na straně serveru

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

6.1.2 Nastavení na straně klienta

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Co dělat, pokud zapomenete své SSH heslo?

6.2.1 Pokud máte fyzický přístup

  1. Nabootujte do režimu jednoho uživatele (vyberte recovery mode v GRUBu)
  2. Resetujte heslo:
    passwd username
    
  1. Restartujte systém

6.2.2 Pokud fyzický přístup není možný (Cloud VPS)

  • Použijte konzoli VPS poskytovanou hostingovou službou
  • Použijte ověřování veřejným klíčem

6.3 Jak používat SSH ve Windows?

6.3.1 Použití PowerShell

ssh username@server-ip-address

6.3.2 Použití PuTTY

  1. Stáhněte a nainstalujte PuTTY
  2. Zadejte IP adresu serveru do Host Name
  3. Vyberte SSH jako typ připojení
  4. Přihlaste se pomocí uživatelského jména a hesla

6.4 Jak nakonfigurovat SSH na Ubuntu WSL?

6.4.1 Instalace SSH serveru

sudo apt update && sudo apt install openssh-server

6.4.2 Úprava nastavení SSH

PasswordAuthentication yes

Spusťte SSH ručně (WSL nepoužívá systemd):

sudo service ssh start

6.5 Další osvědčené postupy zabezpečení

6.5.1 Použití Fail2Ban

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 Změna SSH portu

Port 2200
sudo ufw allow 2200/tcp

6.6 Jak monitorovat SSH logy v reálném čase?

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 Tipy pro pohodlnější používání SSH

6.7.1 Použití .ssh/config pro jednoduché přihlášení

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Poté se připojte pomocí:

ssh myserver

6.7.2 Použití ssh-agent

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Závěr

Tato sekce shrnula často kladené otázky související se SSH:

. Jak vyřešit problémy s časovým limitem SSH * Jak obnovit zapomenuté heslo * Jak používat SSH ve Windows a WSL * Nejlepší bezpečnostní postupy * Jak zkontrolovat logy SSH * Tipy, jak učinit SSH pohodlnějším pomocí .ssh/config*

Použitím těchto technik můžete vytvořit bezpečné a efektivní prostředí SSH a plynule spravovat vzdálené servery.

侍エンジニア塾