Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

Chytré používání SSH

Modul 2: SSH a klíče · Doba čtení: 10 min.

Cíl lekce: Po této lekci budete umět SSH pohodlně používat každý den s vlastním konfiguračním souborem, kopírovat soubory pomocí scp a rsync a dostat se tunelem k databázi, aniž by databázový port musel být otevřený do internetu.

Klíčové pojmy: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunel, ProxyJump, ServerAliveInterval, jiné číslo portu, odvolání klíče

Méně psaní díky ~/.ssh/config

Po několika týdnech budete tohle psát desítkykrát denně:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

S konfiguračním souborem pro klienta bude zápis kratší a uděláte méně chyb. Soubor je uložený na Vašem vlastním počítači: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, bez přípony).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Teď stačí jen:

anna@laptop:~$ ssh web1
anna@web1:~$

Co jednotlivé řádky dělají?

  • Host je přezdívka, kterou si zvolíte sami. Píšete ji za ssh, scp a rsync.
  • HostName je skutečná adresa: IP adresa nebo název, který je zapsaný v DNS.
  • User a Port jsou uživatelské jméno a port, takže si je už nemusíte pamatovat.
  • IdentityFile určuje klíč. Hodí se, pokud máte více klíčů; bez tohoto řádku zkouší ssh Vaše výchozí klíče.
  • ServerAliveInterval 60 posílá každých 60 sekund malý signál, že spojení žije. Mnoho domácích routerů a sítí wifi ukončí tiché spojení po několika minutách; díky tomu Vaše relace zůstane otevřená.

I tady platí, že rozhoduje první hodnota, stejně jako na serveru. Obecná pravidla jako Host * proto dávejte na konec souboru.

Kopírování souborů: scp, rsync a sftp

scp kopíruje soubor, se stejným zápisem jako cp, ale s host: na začátku:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync je chytřejší u složek a velkých objemů dat: posílá jen to, co se změnilo, a umí navázat přerušené kopírování. Musí být nainstalovaný na obou stranách (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Dejte pozor na lomítko za ./site/: s lomítkem zkopíruje rsync obsah složky, bez lomítka složku samotnou (dostanete pak /var/www/example.com/site/). Když si nejste jistí, zkuste to nejdřív s --dry-run, a buďte velmi opatrní s --delete, která na přijímající straně smaže vše, co u Vás neexistuje.

sftp a grafické programy jako FileZilla nebo WinSCP používají stejné spojení SSH a stejný klíč. Samostatný FTP server tedy není potřeba. Staromódní FTP server na VPS nedoporučujeme: obyčejné FTP posílá Vaše heslo po síti nešifrovaně.

Tunel místo otevřeného portu

Tohle je možná to nejužitečnější, co SSH umí. Představte si, že na Vašem serveru běží databáze PostgreSQL. Chcete se k ní připojit z notebooku grafickým programem. Pokušení otevřít port 5432 do internetu je velké. Nedělejte to: otevřené databázové porty patří k největším příčinám úniků dat (lekce 10.2) a kurz později zvenčí kontroluje, že jsou zavřené (úkol Z5.1).

Pomocí lokálního port forwardingu necháte SSH vytvořit tunel:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Čtěte to takto: „poslouchej na mém notebooku na portu 5432 a vše, co tam přijde, pošli spojením SSH na 127.0.0.1:5432, z pohledu serveru“. Dokud je tato relace otevřená, připojíte svůj databázový program k localhost na port 5432 na vlastním notebooku a dostanete se k databázi na serveru.

Proč je to tak dobré?

  • Databáze poslouchá na serveru jen na 127.0.0.1 a zvenčí je nedostupná.
  • Spojení je šifrované pomocí SSH, i když samotná databáze šifrování nemá.
  • Dostane se k ní jen ten, kdo se může přihlásit přes SSH. Využíváte tedy silné zabezpečení, které už máte.

Pokud na Vašem notebooku už něco běží na portu 5432, zvolte vlevo jiné číslo: -L 15432:127.0.0.1:5432, a připojte se na port 15432. Když tunel zapíšete do ~/.ssh/config, budete ho mít vždy po ruce:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

S ssh -N web1-db získáte jen tunel, bez příkazového řádku.

Přes mezilehlý server: ProxyJump

Někdy se k serveru dostanete jen přes jiný, například k databázovému serveru bez veřejné IP adresy za Vaším webovým serverem. ProxyJump přeskočí přes první server na druhý:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

Rozdíl oproti agent forwardingu (lekce 2.1): u ProxyJump vede šifrování od začátku do konce mezi Vaším notebookem a db1. Mezilehlý server jen předává pakety a Váš klíč použít nemůže.

Jiné číslo portu: ano, nebo ne?

Mnoho návodů doporučuje přesunout SSH na jiný port, například 2222. Co to doopravdy udělá?

  • Sníží to šum: většina automatizovaných pokusů o uhodnutí hesla zkouší jen port 22. Váš log bude klidnější.
  • Není to zabezpečení. Skener, který projde všechny porty, najde SSH během několika sekund podle jeho banneru s verzí.

S klíči a vypnutým přihlašováním heslem (lekce 2.2) má port pro bezpečnost malý význam. Pokud ho přesto chcete změnit, postupujte ve správném pořadí: otevřít nový port ve firewallu, nechat SSH poslouchat na obou portech, otestovat to ve druhém okně a teprve potom zavřít starý port. Na Ubuntu 24.04 a novějším k tomu patří systemctl daemon-reload a systemctl restart ssh.socket (lekce 2.2). Nezapomeňte, že i Váš poskytovatel může mít firewall.

Odvolání přístupu

Bývalý kolega nebo tvůrce webu měl na Vašem serveru klíč a už pro Vás nepracuje? Odvolat přístup je jednoduché, pokud o tom máte přehled:

  1. Prohlédněte si všechny klíče: ssh-keygen -lf ~/.ssh/authorized_keys, a to u každého uživatele (také /root/.ssh/authorized_keys).
  2. Odstraňte řádek dané osoby.
  3. Pokud používal vlastní uživatelský účet, zamkněte ho (lekce 3.1) a zkontrolujte, zda byl ve skupině sudo (lekce 3.2).
  4. Pokud viděl hesla, například heslo k databázi v konfiguračním souboru, změňte je také.

Běžný klíč nemá datum platnosti. Co neodstraníte, funguje dál, i po letech. Pokud někomu dáváte dočasný přístup, můžete před jeho řádek v authorized_keys přidat volbu expiry-time="20261231"; po tomto datu server klíč odmítne.

Shrnutí

  • ~/.ssh/config na Vašem počítači uchovává pro každý server název, uživatele, port a klíč; Host * patří na konec.
  • scp pro jednotlivé soubory, rsync pro složky (pozor na lomítko a na --delete), sftp místo FTP.
  • S ssh -L se dostanete k databázi šifrovaným tunelem, zatímco databázový port zůstává zvenčí zavřený.
  • ProxyJump bezpečně přeskočí přes mezilehlý server; je to lepší než agent forwarding.
  • Jiné číslo portu snižuje šum, ale nezabezpečuje. Klíče, které neodstraníte, fungují dál.

Kvíz

1. Co dělá ssh -L 15432:127.0.0.1:5432 web1?



2. Proč je tunel SSH k databázi lepší než otevřít port 5432 ve firewallu?



3. Přesunete SSH na port 2222. Jaký je nejdůležitější účinek?



4. Ve Vašem ~/.ssh/config je nahoře Host * s User root a níže Host web1 s User anna. Jako který uživatel se přihlásíte k ssh web1?



5. Tvůrce webu měl na Vašem serveru vlastní klíč SSH a už pro Vás nepracuje. Co nestačí?



Úkol

Úkol O2.3: SSH config a tunel. Vytvořte na svém počítači ~/.ssh/config s přezdívkou pro svůj server, přihlaste se jen pomocí ssh <bijnaam>, zkopírujte soubor pomocí scp nebo rsync a vytvořte tunel s -L ke službě, která na Vašem serveru poslouchá jen na 127.0.0.1 (pokud ještě nemáte databázi, použijte port 22 samotného serveru: ssh -L 2200:127.0.0.1:22 <bijnaam> a potom ssh -p 2200 anna@localhost). Odpovězte na otázky o tom, co tunel dělá a proč port nemusí být otevřený.

Úkol O2.3: SSH config a tunel

Tento úkol provádíte sami; nikdo ho nekontroluje. Odškrtněte, co jste udělali, a označte úkol jako splněný.




Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.

Doporučujeme k přečtení

Postupy v těchto článcích platí pro VPS a panely WebOké; u jiných poskytovatelů to funguje podobně.

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…