Kompletní průvodce konfigurací SSH v Ubuntu | Instalace, zvýšení zabezpečení a řešení problémů

目次

1. Úvod

Nastavení SSH na Ubuntu je nezbytné pro správu vzdálených serverů. SSH (Secure Shell) je protokol, který poskytuje zabezpečenou šifrovanou komunikaci a je široce používán pro přístup k vzdáleným serverům, spouštění příkazů a přenos souborů.
V tomto průvodci se budeme věnovat všemu od základní instalace až po pokročilá bezpečnostní nastavení SSH na Ubuntu.

1.1 Proč nastavit SSH na Ubuntu?

1.1.1 Co je SSH?

SSH (Secure Shell) je protokol navržený pro bezpečnou komunikaci přes síť. Běžně se používá pro přihlašování k vzdáleným serverům, přenos souborů a tunelování (přesměrování portů). Na rozdíl od tradičních protokolů jako Telnet nebo FTP šifruje SSH veškerou komunikaci, což zajišťuje vysokou úroveň zabezpečení.

1.1.2 Kdy potřebujete SSH na Ubuntu?

SSH je užitečné pro vzdálenou správu v různých scénářích, například:

  • Správa cloudových serverů – cloudové služby jako AWS, GCP a Vultr používají SSH pro přístup k vzdáleným serverům.
  • Vzdálené operace v LAN prostředí – přístup k interním serverům nebo vývojovým strojům přes SSH pro práci na dálku.
  • Správa IoT zařízení – vzdálené ovládání vestavěných zařízení jako Raspberry Pi.

Ve výchozím nastavení je SSH na Ubuntu zakázáno. Abyste jej mohli používat, musíte jej nainstalovat a ručně nakonfigurovat.

2. Základní konfigurace SSH

Pro použití SSH na Ubuntu musíte nainstalovat SSH server (OpenSSH) a správně jej nakonfigurovat. Tato sekce pokrývá instalaci, základní nastavení, konfiguraci firewallu a způsob připojení k vašemu 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í, zabezpečené přenosy souborů (SCP a SFTP) a přesměrování portů.

2.1.2 Instalace OpenSSH

Ve výchozím nastavení Ubuntu neobsahuje předinstalovaný SSH server. Použijte následující příkaz k jeho instalaci:

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

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

2.1.3 Spuštění a povolení SSH serveru

Po instalaci spusťte SSH server a povolte jeho automatické spouštění při startu systému.

sudo systemctl enable --now ssh

Volba enable zajistí, že se SSH spustí automaticky při bootování OS.

2.1.4 Ověření stavu SSH

Pro kontrolu, zda SSH server běží, použijte:

systemctl status ssh

Pokud uvidíte výstup podobný následujícímu, SSH běží správně:

● 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 uvidíte inactive (dead) nebo failed, spusťte službu ručně:

sudo systemctl start ssh

2.2 Konfigurace firewallu (UFW)

Ubuntu poskytuje ufw (Uncomplicated Firewall) pro snadnou správu firewallu. Musíte nakonfigurovat UFW tak, aby povoloval SSH připojení.

2.2.1 Kontrola stavu UFW

Zkontrolujte aktuální stav firewallu pomocí:

sudo ufw status

Příklad výstupu (pokud je UFW vypnutý):

Status: inactive

Příklad výstupu (pokud je UFW zapnutý):

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

2.2.2 Povolení SSH provozu

Pro povolení SSH připojení na výchozím portu 22 spusťte:

sudo ufw allow ssh

Případně můžete port specifikovat explicitně:

sudo ufw allow 22/tcp

2.2.3 Povolení UFW

Pokud je UFW vypnutý, povolte jej pomocí:

sudo ufw enable

Před povolením UFW se ujistěte, že je SSH povoleno, jinak si můžete zablokovat přístup.

2.2.4 Ověření nastavení UFW

Zkontrolujte, zda jsou pravidla firewallu aplikována správně:

sudo ufw status verbose

Příklad výstupu:

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

If you see this, SSH is allowed through the firewall.

2.3 Připojení k SSH

Jakmile je SSH server spuštěn, můžete se připojit z klientského PC.

2.3.1 Připojení z Linuxu/macOS

V Linuxu nebo macOS otevřete terminál a spusťte:

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í jako toto:

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 a stiskněte Enter pro pokračování.

2.3.2 Připojení z Windows

Ve Windows můžete použít PowerShell nebo PuTTY k připojení přes SSH.
Použití PowerShell
Windows 10 a novější obsahují SSH klienta v PowerShellu. Připojte se pomocí:

ssh username@server-ip-address

Použití PuTTY

  1. Stáhněte a nainstalujte PuTTY z oficiální stránky .
  2. Otevřete PuTTY a zadejte IP adresu serveru do pole Host Name (or IP address) .
  3. Nastavte Connection type na SSH a klikněte na Open .
  4. Zadejte své uživatelské jméno a heslo pro připojení.

3. Zvyšování bezpečnosti SSH

SSH je výkonný nástroj pro vzdálený přístup, ale pokud jej necháte s výchozími nastaveními, může představovat bezpečnostní rizika. Útočníci často cílí na SSH servery pomocí útoků hrubou silou nebo skenování portů. Pro vytvoření bezpečnějšího prostředí SSH je nutné použít správná bezpečnostní nastavení.

3.1 Zakázání přihlášení jako root

Ve výchozím nastavení může Ubuntu povolit přihlášení rootem přes SSH. Protože účet root má plná systémová oprávnění, je častým cílem útočníků. Zakázání přihlášení rootem a místo toho používání běžného uživatelského účtu výrazně zvyšuje bezpečnost.

3.1.1 Kroky konfigurace

  1. Upravit konfigurační soubor SSH /etc/ssh/sshd_config .
    sudo nano /etc/ssh/sshd_config
    
  1. Najděte následující řádek a změňte jej na PermitRootLogin no .
    PermitRootLogin no
    
  1. Uložte soubor a restartujte službu SSH.
    sudo systemctl restart ssh
    
  1. Ověřte, že nastavení bylo použito.
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Pokud výstup ukazuje PermitRootLogin no, nastavení bylo úspěšně aplikováno.

3.2 Zakázání ověřování heslem a povolení ověřování veřejným klíčem

Používání ověřování veřejným klíčem je mnohem bezpečnější než spoléhat se na ověřování heslem. S ověřováním veřejným klíčem nemusíte zadávat heslo, což snižuje riziko útoků hrubou silou.

3.2.1 Vytvoření páru SSH klíčů

Na svém lokálním PC vytvořte pár SSH klíčů:

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

Tím se vytvoří dva soubory:

  • Soukromý klíč (id_rsa)Uchovejte jej na svém lokálním PC (nikdy jej nesdílejte veřejně).
  • Veřejný klíč (id_rsa.pub)Zkopírujte jej na server.

3.2.2 Kopírování veřejného klíče na server

Použijte následující příkaz pro zkopírování veřejného klíče na server:

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

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

Upravte konfigurační soubor SSH:

sudo nano /etc/ssh/sshd_config

Najděte následující řádek a změňte jej na:

PasswordAuthentication no

Restartujte SSH, aby se změny projevily:

sudo systemctl restart ssh

3.3 Omezení přístupu SSH na konkrétní uživatele

Pro zvýšení bezpečnosti můžete omezit přístup SSH na konkrétní uživatele.

3.3.1 Kroky konfigurace

  1. Otevřete konfigurační soubor SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Přidejte následující řádek s výčtem povolených uživatelů.
    AllowUsers user1 user2
    
  1. Restartujte SSH, aby se změny projevily.
    sudo systemctl restart ssh
    

3.4 Změna portu SSH

Výchozí port SSH (22) je často cílem útočníků. Změna na nestandardní port může snížit riziko automatizovaných útoků.

3.4.1 Kroky konfigurace

  1. Otevřete konfigurační soubor SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Najděte následující řádek a změňte jej na vlastní port (např. 2200 ).
    Port 2200
    
  1. Uložte soubor a restartujte SSH.
    sudo systemctl restart ssh
    

3.4.2 Aktualizace nastavení firewallu

Po změně SSH portu povolte nový port přes UFW:

sudo ufw allow 2200/tcp

Ověřte nastavení:

sudo ufw status

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

Fail2Ban je nástroj, který detekuje neúspěšné pokusy o přihlášení přes SSH a dočasně blokuje útočící IP adresu.

3.5.1 Instalace Fail2Ban

sudo apt install fail2ban -y

3.5.2 Vytvoření konfiguračního souboru

Zkopírujte výchozí konfigurační soubor:

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

Upravte konfigurační soubor:

sudo nano /etc/fail2ban/jail.local

Upravte sekci SSH následovně:

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

3.5.3 Restartování Fail2Ban

Restartujte Fail2Ban, aby se změny projevily:

sudo systemctl restart fail2ban

3.5.4 Kontrola seznamu blokací

Pro kontrolu, které IP adresy jsou zablokovány:

sudo fail2ban-client status sshd

Shrnutí

V této sekci jsme pokryli základní vylepšení zabezpečení SSH, včetně:

  • Zakázání přihlášení jako root
  • Zakázání ověřování heslem a povolení ověřování veřejným klíčem
  • Omezení přístupu SSH na konkrétní uživatele
  • Změna SSH portu
  • Použití Fail2Ban k blokování útoků hrubou silou

Implementací těchto opatření můžete vytvořit bezpečnější prostředí SSH.

4. Pokročilá konfigurace SSH

Po nastavení zabezpečení SSH můžete využít pokročilá nastavení ke zlepšení použitelnosti a bezpečnosti. Tato sekce se zabývá správou ssh.socket v Ubuntu 22.10 a novějším, SSH tunelováním (přesměrováním portů), nastavením více SSH portů a omezením přístupu SSH na konkrétní IP adresy.

4.1 Použití ssh.socket v Ubuntu 22.10 a novějším

Od Ubuntu 22.10 může správa služby SSH přejít z ssh.service na ssh.socket. To umožňuje, aby se SSH spouštělo dynamicky při přijetí požadavku na připojení, čímž se snižuje využití zdrojů.

4.1.1 Kontrola stavu ssh.socket

Pro kontrolu, zda je ssh.socket povoleno, spusťte:

sudo systemctl status ssh.socket

Příklad výstupu (pokud je 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 Povolení nebo zakázání ssh.socket

Pokud je ssh.socket zakázáno, povolte jej pomocí:

sudo systemctl enable --now ssh.socket

Pro návrat k tradičnímu ssh.service zakázat ssh.socket a místo toho povolit 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í umožňuje bezpečný přenos dat mezi vzdáleným serverem a lokálním počítačem, obcházející externí sítě.

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

Užitečné pro bezpečný přístup k vzdáleným databázím nebo webovým serverům.
Příklad: Připojení k vzdálenému MySQL serveru (port 3306) z vašeho lokálního PC

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

4.2.2 Vzdálené přesměrování portu

Zveřejní lokální službu na vzdáleném serveru přes SSH.
Příklad: Přesměrování lokálního webového serveru (port 80) na port 8080 na vzdáleném serveru

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

4.2.3 Dynamické přesměrování portu

Promění SSH na SOCKS proxy pro anonymní prohlížení webu.
Příklad: Vytvoření SOCKS proxy na lokálním portu 1080

ssh -D 1080 username@server-ip-address

4.3 Poslouchání na více SSH portech

Ve výchozím nastavení SSH naslouchá na jednom portu (port 22). Konfigurace více portů poskytuje větší flexibilitu přístupu.

4.3.1 Kroky konfigurace

  1. Upravte konfigurační soubor SSH.
    sudo nano /etc/ssh/sshd_config
    
  1. Přidejte více položek portu.
    Port 22
    Port 2200
    
  1. Restartujte SSH.
    sudo systemctl restart ssh
    
  1. Povolit nový port ve firewallu.
    sudo ufw allow 2200/tcp
    

4.4 Omezení přístupu SSH na konkrétní IP adresy

Pro zvýšení bezpečnosti můžete omezit přístup SSH na konkrétní IP adresy.

4.4.1 Konfigurace /etc/hosts.allow

Povolte přístup SSH pouze z určitých IP adres úpravou:

sudo nano /etc/hosts.allow

Přidejte následující řádek (nahraďte 192.168.1.100 povolenou IP adresou):

sshd: 192.168.1.100

4.4.2 Konfigurace /etc/hosts.deny

Pro blokování všech ostatních IP adres ve výchozím nastavení:

sudo nano /etc/hosts.deny
sshd: ALL

Tím se zajistí, že pouze IP adresy uvedené v hosts.allow mohou přistupovat k SSH.

Shrnutí

Tato sekce pokrývala pokročilá nastavení SSH, včetně:

  • Správa ssh.socket v Ubuntu 22.10 a novějším
  • Používání SSH tunelování (přesměrování portů) pro zabezpečená spojení
  • Poslouchání na více SSH portech
  • Omezení přístupu SSH na konkrétní IP adresy

Aplikace těchto nastavení zlepšuje bezpečnost a použitelnost SSH.

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

I při správné konfiguraci se mohou vyskytnout problémy se SSH. Tato sekce poskytuje řešení běžných problémů se SSH.

5.1 Nelze se připojit k SSH

Pokud obdržíte chybu Connection refused nebo časový limit, zkontrolujte následující.

5.1.1 Služba SSH neběží

Ověřte stav služby SSH:

sudo systemctl status ssh

Řešení:

  • Pokud je Active: inactive (dead) nebo failed, restartujte SSH.
    sudo systemctl restart ssh
    
  • Povolte automatické spouštění SSH.
    sudo systemctl enable ssh
    

5.1.2 Firewall blokuje SSH

Ujistěte se, že SSH je povoleno přes UFW:

sudo ufw status

Řešení: Pokud SSH není povoleno:

sudo ufw allow 22/tcp

Pokud používáte vlastní port:

sudo ufw allow 2200/tcp

5.2 Chyby autentizace

Pokud SSH odmítá pokusy o přihlášení, zkontrolujte následující:

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

Ujistěte se, že používáte správné uživatelské jméno:

ssh username@server-ip-address

5.2.2 Problémy s autentizací veřejným klíčem

Ověřte, že váš veřejný klíč je správně uložen v ~/.ssh/authorized_keys.

cat ~/.ssh/authorized_keys

5.2.3 Nesprávná oprávnění

Ujistěte se, že adresář a soubory SSH mají správná oprávnění:

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

Shrnutí

Tato sekce pokrývala běžné problémy se SSH a jejich řešení, včetně:

  • Kontrola, zda SSH běží
  • Zajištění, že firewall neblokuje SSH
  • Řešení problémů s autentizací

Použijte tyto kroky pro rychlé řešení problémů s připojením SSH.

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

Tato sekce se zabývá běžnými otázkami týkajícími se SSH a řešeními pro zlepšení vašeho SSH zážitku při zachování bezpečnosti.

6.1 Jak zabránit časovým limitům SSH?

Pokud se SSH spojení odpojí po určité době nečinnosti, vyzkoušejte následující nastavení.

6.1.1 Konfigurace na straně serveru

Upravte /etc/ssh/sshd_config a přidejte:

ClientAliveInterval 60
ClientAliveCountMax 3

Restartujte SSH pro aplikaci změn:

sudo systemctl restart ssh

6.1.2 Konfigurace na straně klienta

Upravte lokální konfigurační soubor SSH ~/.ssh/config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 Co dělat, když zapomenu své SSH heslo?

6.2.1 Pokud máte fyzický přístup k serveru

  1. Nabootujte do režimu obnovy přes GRUB menu.
  2. Resetujte heslo následujícím příkazem:
    passwd username
    
  1. Restartujte systém.

6.2.2 Pokud nemáte fyzický přístup k serveru (např. Cloud VPS)

  • Použijte konzolovou funkci poskytovatele cloudu pro přístup k serveru.
  • Nastavte autentizaci pomocí SSH klíče místo spoléhaní se na hesla.

6.3 Jak používat SSH na Windows?

6.3.1 Použití PowerShell

Windows 10 a novější obsahují vestavěného SSH klienta. Otevřete PowerShell a spusťte:

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 (or IP address) .
  3. Vyberte SSH jako typ připojení a klikněte na Open .
  4. Přihlaste se pomocí svého uživatelského jména a hesla.

6.4 Jak nastavit SSH v Ubuntu WSL (Windows Subsystem for Linux)?

Pro povolení SSH ve WSL postupujte podle těchto kroků.

6.4.1 Instalace SSH serveru

sudo apt update && sudo apt install openssh-server

6.4.2 Konfigurace SSH

Upravte /etc/ssh/sshd_config a povolte ověřování heslem:

PasswordAuthentication yes

Protože WSL ve výchozím nastavení nepoužívá systemd, spusťte SSH ručně:

sudo service ssh start

6.5 Jaká další bezpečnostní opatření bych měl přijmout?

6.5.1 Instalace Fail2Ban

Zabraňte útokům hrubou silou instalací Fail2Ban:

sudo apt install fail2ban -y

Upravte konfigurační soubor /etc/fail2ban/jail.local:

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

Restartujte Fail2Ban:

sudo systemctl restart fail2ban

6.5.2 Změna portu SSH

Upravte /etc/ssh/sshd_config pro změnu výchozího portu SSH:

Port 2200

Restartujte SSH a aktualizujte nastavení firewallu:

sudo ufw allow 2200/tcp

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

Pro zobrazení SSH logů v reálném čase použijte:

sudo journalctl -u ssh -f

Pro kontrolu starších logů:

sudo cat /var/log/auth.log | grep ssh

6.7 Jak učinit SSH pohodlnějším?

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

Uložte často používaná SSH připojení do ~/.ssh/config:

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

Nyní se můžete připojit pomocí:

ssh myserver

6.7.2 Použití ssh-agent k vyhnutí se opakovanému zadávání hesla

Spusťte:

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

To umožňuje SSH připojení bez nutnosti zadávat heslo pokaždé.

Shrnutí

Tato sekce poskytla odpovědi na běžné otázky týkající se SSH, zahrnující:

  • Zabránění časovým limitům SSH
  • Obnovení po zapomenutém hesle
  • Používání SSH na Windows a WSL
  • Aplikaci dalších bezpečnostních opatření
  • Sledování SSH logů
  • Zpříjemnění používání SSH

Dodržením těchto tipů můžete vytvořit bezpečné a efektivní SSH prostředí pro vzdálenou správu serverů.

Související články

Related

1. Úvod Pomocí SSH na Ubuntu můžete bezpečně přistupovat a spravovat svůj server nebo PC na dálku. Tento průvodce vysvět[…]