Secure Shell (SSH)
SSH je protokol, který provozuje nevídanou polovinu internetu: vzdálenou konzoli každého správce systému, každý krok nasazení vývojáře, každé odeslání Git do soukromého úložiště. Na konci 90. let nahradil telnet a od té doby je výchozím protokolem zabezpečeného prostředí. Vědět, co to vlastně dělá, dává spoustu operací smysl.
Celé tělo článku je uvedeno níže v angličtině.
SSH (Secure Shell) je šifrovací síťový protokol pro bezpečný provoz síťových služeb v nezabezpečené síti. Nejčastěji se používá pro vzdálené přihlášení z příkazového řádku ("shell" v názvu) a pro přenos souborů, ale základní protokol je dostatečně obecný pro tunelování jakékoli TCP aplikace. SSH vytvořil Tatu Ylönen v roce 1995 po útoku na jeho univerzitě, který šňupal hesla; implementace OpenSSH (zahájená v roce 1999) je dnes nejrozšířenější verzí.
Co poskytuje SSH
Tři vlastnosti:
- Důvěrnost – při přenosu šifrováno. Síťoví pozorovatelé vidí zašifrované bajty, nikoli příkazy nebo hesla.
- Integrity — upravené pakety jsou detekovány a odmítnuty.
- Ověření obou konců — klient se ověřuje na serveru (metoda klienta nebo hostitele, veřejný klíč) klíč).
Tato kombinace nahrazuje starší sadu telnet, rlogin, rsh a rcp – z nichž všechny přenášely přihlašovací údaje v prostém textu.
Jak fungují připojení SSH
Potřebné handshake, zjednodušené na serveru Cl2 PLZZXPLZ2 Cl2ZXPLZ2 port 22 (konfigurovatelný).
Metody ověřování
- Heslo. Uživatel zadá heslo; je odeslána zašifrovaná v rámci relace. Jednoduchý, ale zranitelný vůči útokům nacpáním pověření proti exponovaným serverům SSH.
- Veřejný klíč. Klient má soukromý klíč (typicky v
~/.ssh/id_ed25519); server má odpovídající veřejný klíč v~/.ssh/authorized_keys. Klient prokáže vlastnictví soukromého klíče podpisem výzvy ze serveru. Síť neprochází žádné heslo. Doporučené výchozí nastavení pro téměř všechny případy použití. - Certificate based. CA podepisuje certifikát pro klíč uživatele, včetně vypršení platnosti a omezení. Servery důvěřují CA, automaticky důvěřují podepsaným certifikátům. Správný model pro organizace s mnoha uživateli; nahrazuje noční můru distribuce ssh-key.
- FIDO2 / hardwarový klíč SSH. Nedávné OpenSSH podporuje klíče podporované hardwarovým bezpečnostním tokenem. Odolné proti phishingu, vyžaduje fyzické vlastnictví.
- Multi-faktor — zkombinujte výše uvedené. Heslo + klíč nebo heslo + hardwarový token.
Za shellovým přístupem: přesměrování portů
SSH může tunelovat libovolný TCP provoz prostřednictvím šifrované relace:
- PLZ821XPLZ:PLZ81X (X3)
ssh -L 9000:interní:3306 uživatel@bastionotevře místní port 9000, který se tuneluje nainternal:3306přes hostitele bastionu. Užitečné pro dosažení interních služeb prostřednictvím skokového hostitele. - Vzdálené předávání portu (
-R): opačný směr. Vzdálený hostitel získá port, který tuneluje zpět ke službě na vašem počítači. - Dynamické předávání portů (
-D): SSH vytvoří na vašem místním počítači proxy SOCKS5. Jakákoli aplikace, na kterou je namířena, má svůj TCP provoz tunelovaný přes relaci SSH. Účinně je VPN pro jednoho uživatele přes SSH.
SSH dynamické předávání je jedinou nejužitečnější VPN pro chudé lidi; každý, kdo má někde server, k němu má přístup.
Ekosystém OpenSSH
- ssh – klient
- sshd – serverový démon
- scp – nyní nahrazena zabezpečenou kopií (starší verze sftp, pod hood)
- sftp — zabezpečený FTP, samostatný protokol, který běží uvnitř SSH
- ssh-agent — ukládá dešifrované klíče do paměti, takže pro připojení nezadáváte hesloXPLZ21ZPLssh-key3XX2 páry klíčů
- ssh-copy-id — zkopíruje váš veřejný klíč do vzdáleného souboru autorizovaných_klíčů
Ochrana SSH serveru
SSH server na veřejném internetu neustále kontroluje pověření. Obrana:
- Zakázat ověřování heslem. Pouze veřejné klíče. Odstraní celý útočný vektor zaplňující pověření.
- Použijte klíče Ed25519. Moderní, rychlý, malý.
ssh-keygen -t ed25519je správný příkaz pro nové klíče. - Použijte jiný než výchozí port. Marginal; většinou snižuje hluk protokolu skeneru.
- fail2ban nebo sshguard — blokovat adresy IP po opakovaných neúspěšných pokusech.
- Omezit uživatelské účty, které mohou SSH.
AllowUsersv sshd_config. - Používejte VPN nebo Tailscale — vůbec nevystavujte SSH veřejnému internetu, pokud se tomu můžete vyhnout.
- Audit známých_hostitelů a autorizovaných_klíčů. Odstraňte klíče pro odchozí zkontrolujte neočekávané položky.
Často kladené otázky
- Jaký port používá SSH?
- 22 standardně. Port je konfigurovatelný; někteří operátoři přesouvají SSH na nestandardní port, aby snížili přenos skenování v protokolech. Toto je bezpečnost prostřednictvím nejasností – užitečná pro hygienu, nikoli pro skutečnou bezpečnost. Skutečným zabezpečením je silná autentizace.
- Je SSH bezpečnější než HTTPS?
- Různé modely hrozeb. Oba používají moderní kryptografii a jsou v podstatě stejně bezpečné na úrovni protokolu. SSH se obvykle používá s ověřováním pomocí veřejného klíče (bez hesel, velmi silné), zatímco mnoho webů HTTPS stále používá ověřování heslem (ve výchozím nastavení slabší). Protokoly jsou rovnocenné; praxe nasazení se liší.
- Mohu pro přenos souborů použít SSH?
- Ano. <code>scp</code> a <code>sftp</code> běží přes SSH. SFTP je schopnější moderní volbou – obnovitelné přenosy, rekurzivní operace, atomické zápisy. <code>rsync</code> může také používat SSH jako svůj přenos a je tím správným nástrojem pro jakýkoli netriviální přenos.
- Co je to klíč SSH?
- Pár veřejný/soukromý klíč používaný pro ověření. Soukromý klíč je uložen v <code>~/.ssh/id_*</code> na vašem počítači; veřejný klíč se nainstaluje do <code>~/.ssh/authorized_keys</code> na servery, ke kterým se připojujete. Ztráta soukromého klíče bez přístupové fráze je vážný problém – kdokoli s ním se může přihlásit jako vy. Vždy chraňte klíče SSH pomocí přístupové fráze.
- Proč SSH říká 'host klíč změněn'?
- Identifikační klíč serveru se od vašeho posledního připojení změnil — buď byl server přestavěn, klíč byl otočen, nebo je něco špatně (nejvíce znepokojující případ: někdo se vydává za server). Nepřijímejte slepě nový klíč; ověřit mimo pásmo u operátora serveru. Pokud se jednalo o legitimní rotaci, odstraňte starý klíč ze známých_hostitelů a přijměte nový.