Úvod > Návody > SSH – bezpečné používání vzdáleného počítače a kopírování dat

SSH – bezpečné používání vzdáleného počítače a kopírování dat

Zkratka SSH pochází s anglického sousloví Secure Shell. Jde o bezpečnou (šifrovanou) komunikaci mezi dvěma počítači. SSH použijeme, chceme-li například ovládat počítač na dálku (k němuž máme přihlašovací údaje) nebo třeba jen přenášet soubory.

Diagram SSH

SSH jakožto zabezpečený komunikační protokol vznikl v reakci na špatně zabezpečené (ba přímo nebezpečné) protokoly a příslušné služby typu Telnet.

Ve své nejzákladnější podobě se pomocí SSH vzdálený počítač ovládá pouze pomocí příkazové řádky (terminálu, konzole). Ovšem později si ukážeme, že díky SSH tunelu můžeme ovládat i vzdálenou plochu, a tedy i grafické rozhraní systému včetně programů.

Obsah

Co je SSH a k čemu se používá?

Ovládání SSH přes terminál se báječně hodí například na správu vzdáleného počítače, ke kopírování a přenášení souborů (SCP, viz níže) nebo třeba používání určitých programů, u kterých není nutné pracovat s grafickým rozhraním (vědci a technici třeba ocení možnost mnohem vyššího výpočetního vzdáleného serveru, ke kterému v danou chvíli nemají přístup).

Využití SSH je opravdu široké – zmiňme dále třeba administraci serverů, založení VPN (virtuální privátní sítě), přesměrování portů TCP i X11 nebo brouzdání po webu přes proxy se šifrováním. Díky síťovému tunelování je tento komunikační kanál pro tyto účely velmi bezpečný.

Tyto vlastnosti ocení samozřejmě i jednotlivec/domácí uživatel, který pomocí SSH může vzdáleně spravovat svůj počítač či bezpečně kopírovat mezi počítači data.

Navázání spojení mezi operačními systémy

Nejčastěji se SSH používá mezi unixovými a Unixu podobnými systémy, zejména pak mezi dvěma linuxovými stroji. To však neznamená, že uživatelé Windows jsou o SSH implementaci ochuzeni: Z Windows se dá připojit na tyto systémy, na kterých SSH server běží, velmi snadno, například pomocí bezplatného (a open-sourcového) programu WinSCP (ten primárně slouží pro přenos souborů přes SSH/SCP či FTP a SFTP) a dalších (o tom později). Stejně tak je možnost na Windows provozovat i samotný SSH server.

Věnujme se nyní konkrétním případům a specifickým operačním systémům.

LINUX

Instalace a spuštění SSH serveru na Linuxu

Soustřeďme se na dva velice populární linuxové operační systémy: openSUSE a Ubuntu (a deriváty). V openSUSE je SSH server již nainstalován po instalaci samotného systému. V systému Ubuntu jej (patrně) musíme doinstalovat – buď pomocí správce softwaru, nebo rychleji přes terminál zadáním příkazu

$sudo apt-get install openssh-server

Po instalaci by server měl automaticky běžet, a pokud ne, spustíme ho zadáním příkazu

$sudo service ssh start

V openSUSE nemusíme server ani instalovat ani ručně spouštět (SSHD Daemon bývá již spuštěn), zato však musíme otevřít příslušný port ve firewallu (můžeme si z bezpečnostních důvodů zvolit jiný než standardní port 22, viz níže) a jsme de facto hotovi.

V případě, že SSHD démon neběží, otevřeme administrační systém Yast, pak položku Systém a klikneme na Editor úrovní běhu. V seznamu najdeme danou službu (SSHD) a spustíme. Nebo můžeme použít příkaz

$su
# service sshd start


Yast v textovém režimu (konzoli). Použijeme-li nestandardní port, otevřeme jej v možnosti "Pokročilé...".

Bezpečnost, změna SSH portu

Z bezpečnostních důvodů je vhodné změnit výchozí port a také použít silnější heslo pro přihlášení do systému. Důvodem je, že standardní porty, jako je onen 22 používaný SSH, jsou předmětem častých útoků hrubou silou – a v případě, že používáte slabé heslo, systém může být takto zdálky napaden, resp. komunikace odposlouchávána.

Vaše heslo by mělo mít alespoň 12 znaků, mělo by sestávat z malých i velkých písmen (alespoň jednoho), alespoň jedné číslice a speciálního znaku (mezery, $,_, # apod.).

Port pro SSH server změníme následovně:

Pomocí oblíbeného editoru (vim, nano, ...) otevřeme konfigurační soubor sshd_config (níže je použit editor nano v administrátorském režimu, můžete použít ale i grafické editory)

$ su
# nano /etc/ssh/sshd_config

resp. v Ubuntu použijeme příkaz

$ sudo nano /etc/ssh/sshd_config

Řádek #Port 22 odkomentujeme (smažeme „#“) a změníme číslo portu. Zároveň se ale musíme ujistit, zda vybraný nový port není již nějakým procesem používán. To můžeme zjistit několika způsoby – přehledný výsledek dává například příkaz

# netstat -ltnup

Chcete-li informace pouze o příslušném portu (zde si volíme 53033, ale výběr je na vás) a zda ho nepoužívá nějaký proces, zadáme

# netstat -ltnup | grep ":53033"

V případě, že výstup je prázdný, je port volný.


Příklad konfiguračního souboru.

Výběr nového portu je libovolný, ale i přesto bychom se měli vyhnout běžným portům (jež jsou využívány běžnými službami a aplikacemi), tj. v rozsahu 0-1023. Ty je doporučeno vynechat. Další tzv. registrované porty mají rozsah 1024-49151. Můžeme je sice použít, ale není vyloučeno, že v některých sítích by mohly nastat problémy – lepší je tedy se jim vyhnout a použít volné (dynamické) porty v rozsahu 49152-62535. (Proto jsme výše jako příklad uvedli port 53033, ale samozřejmě můžete použít jiný, je-li volný.)

Do konfiguračního souboru zapíšeme vybraný port a SSH démona restartujeme. V openSUSE a podobných systémech příkazem

# systemctl reload sshd.service

nebo

# service sshd restart

(Namísto reload lze použít stop a poté start.)

V Ubuntu službu restartujeme příkazem

$ sudo service ssh reload

WINDOWS

Ve Windows si můžeme SSH server zřídit pomocí aplikací třetích stran: některé jsou zdarma a s otevřenými kódy, jiné jsou placené, přičemž pro domácí a nekomerční použití bývají zdarma.

Jejich nastavení je vesměs stejné, jak jsme si to popsali v případě SSH serveru na Linuxu: s tím rozdílem, že daná nastavení se dají "naklikat" nebo zapsat do polí v aplikaci.

Z nejznámějších SSH serverů pro Windows jmenuje například FreeSSHd, který je zcela zdarma. Nabízí snadnou správu i přehledné nastavení (měli bychom upozornit, že používá ActiveX). Po instalaci je nutné povolit tuto službu a port na firewallu Windows (firewall by na tuto službu měl upozornit automaticky).

Ke stažení: FreeSSHd

S pomocí FreeSSHd lze povolit a ovládat i samotný Telnet, na jedno kliknutí může správce spustit a zastavit i SSH server (funguje v rámci odlehčeného CygWin). Je možné přidat nové uživatele a autorizovat je buď přes NT jádro (účet Windows), nebo vytvořené heslo (uloží se jako SHA1 hash) a také veřejný klíč (jen pro SSH).

Rovněž je rozumné změnit výchozí port pro SSH server, a to z rozsahu, který jsme si řekli výše. Společně s SSH serverem získává uživatel i možnost SFTP (viz níže), tudíž zabezpečený přenos souborů přes šifrovaný FTP kanál.

Výborným programem je Bitvise SSH Server. Je zdarma pouze pro nekomerční použití, jinak licence pro komerční prostředí stojí 100 amerických dolarů za instalaci: korporativní ceny se pohybují od 10 000 USD (v rámci budovy), přes mezinárodní nasazení za 25 000 USD až po 40 000 USD.

Ke stažení: Bitvise SSH Server

Z dalších SSH serverů pro Windows jmenuje tyto:

  • Kpym Telnet/SSH Server (open source, zdarma)
  • CopSSH (pro nekomerční použití zdarma)

Nasazení

Pro přihlášení k počítači s SSH serverem je nutné znát jeho IP adresu (nebo jméno). Nyní máme prakticky tři možnosti, které mohou nastat:

  • SSH server běží na vzdáleném počítači na internetu s veřejnou IP adresou.
  • SSH server běží na počítači v rámci místní sítě (LAN).
  • SSH server běží na vzdáleném počítači na internetu s neveřejnou IP adresou, resp. je za NATem.

Pokud počítač není uzavřen v lokální síti (schován za další NAT a soukromou IP adresu), ale připojen rovnou do internetu s veřejnou IP adresou, tak k němu přistoupíme pomocí jediného příkazu:

$ssh jmeno@IP_Adresa_Pocitace

kde IP_Adresa_Pocitace je samozřejmě IP adresa počítače, do nějž se zdálky hlásíme (tedy toho s běžícím SSH serverem).

Je-li vše v pořádku, objeví se informace o vygenerovaném klíči, jenž bude šifrovat komunikaci, ten přijmeme, zadáme heslo a jsme v systému.

Jestliže jsme ale změnili port pro SSH (výše jsme zvolili port 53033), musíme jej při přihlášení do vzdáleného systému specifikovat:

$ssh -p 53033 jmeno@IP_Adresa_Pocitace

Stejný postup platí v případě vzdáleného přihlášení do počítače s běžícím SSH server v rámci lokální sítě (doma, v práci apod.)

V takovém případě si však musíme zjistit lokální IP adresy daných strojů (s SSH servery). Na takovém počítači (je-li jich víc, pak na všech) zadáme příkaz:

#ifconfig

Ten nám dá informace o místních síťových rozhraních. Ve výstupu najdeme síťovou kartu, kterou k připojení používáme. Na jednom řádku je uvedená i její lokální IP adresa (inet. adr.)

K tomuto stroji se pak připojíme zcela stejně jako v případě výše – je-li uživatelské jméno "uzivatel" a počítač má lokální IP adresu např. 192.168.1.10 a otevře-li jsme pro SSH port 53033, zadáme:

$ssh -p 53033 uzivatel@192.168.1.10

Samozřejmě nesmíme zapomínat na to, že uživatel uzivatel musí být opravdu uživatelem daného vzdáleného počítače (nemá-li na něm účet, pak se do něj logicky nepřihlásí).

Ze zřejmých důvodů je rovněž dobré, když na síťovém prvku, který v rámci lokální sítě přiděluje počítačům IP adresy, např. routeru, nastavíme, aby IP adresy daným počítačům zůstaly přiděleny napořád (aby neexpirovaly).

Mírně složitější (na první pohled) je situace, kdy vzdálený počítač, do kterého se chceme přihlásit, je schovaný za NATem – kdy v cestě SSH spojení stojí například domácí/firemní router nebo když veřejná IP adresa je sdílena s dalšími počítači v sítě lokálního poskytovatele internetového připojení (což jsou vlastně totožné situace s jemnými nuancemi – od toho se odvíjí i řešení pomocí reverzního SSH tunelu).

Stojí-li v cestě SSH třeba jen domácí router a máme-li veřejnou IP adresu (na WANu), situaci vyřešíme pouhým přeposláním portu na daném routeru do počítače s SSH serverem. (Postup záleží na typu routeru. Jde zkrátka o to, že na routeru se v příslušné sekci nastaví přeposlání portu -- 22, resp. vlastního -- na lokální IP adresu počítače s běžícím SSH serverem).

Jestliže ale nemáme přístup k routeru či jiné síťové jednotce (například ve firmě/kanceláři), musíme sáhnout k jinému řešení. To je stejné jako v případě, že doma máme přípojku se sdílenou IP adresou (nemáme vlastní IP adresu od poskytovatele, pod veřejnou se nás pohybuje více).

Řešení spočívá v tzv. reverzním SSH tunelu a je mu věnován samostatný text: SSH připojení k počítači za NATem aneb Stavíme reverzní tunel.

Spojení mezi systémy: Windows, Linux a další

OpenSSH: Linux ↔ Linux

OpenSSH je nejčastější implementací protokolu SSH, se kterou se setkáváme v unixových a Unixu podobných systémech. Co se týče vztahu server-klient u dvou linuxových strojů, prakticky vše potřebné do začátku bylo řečeno už výše.

Nechceme-li používat terminál ke správě vzdáleného serveru s SSH službou a stačí-li nám pouze přenášet mezi počítači data, můžeme už teď využít grafického rozhraní.

V jakémkoli souborovém správci totiž můžeme použít protokol SSH (resp. protokol FISH – Files Transfered over Shell Protocol) -- čímž získáme přístup k výpisu složek v grafickém kabátu. Soubory pak můžeme vytvářet, mazat, přesouvat apod., jako kdyby byly na pevném disku. Toto ocení zejména méně zkušení uživatelé nebo ti, kterým se v terminálu dobře nepracuje.

Připojit se tímto způsobem ke vzdálenému účtu lze například ze „systémových“ správců souborů, jako jsou Dolphin (KDE), Nautilus (GNOME), ale také z populárních programů Krusader, Filezilla, Midnight Commander a mnohé další.

Windows → Linux

Pro připojení z prostředí Windows na stroj s Linuxem (či jiným Unixu podobným systémem s SSH serverem) slouží velmi populární aplikace Putty. Je zcela zdarma a má otevřené kódy. Není jen klientem pro SSH a Telnet, ale také SCP či SFTP.

Ke stažení: PuTTY

Dalším populárním klientem pro SSH je Tunnelier (Bitvise SSH Client). K nekomerčnímu použití je dostupný zdarma.

Ke stažení: Bitvise SSH Client/Tunnelier

Bezpečný přenos souborů: SCP

Protokol SCP znamená "Secure Copy", tedy "Bezpečné kopírování" -- k šifrování přenosu dat používá právě SSH. Mnoha uživateli bývá upřednostňován, třebaže neposkytuje tolik funkčnosti jako SFTP. Kdo však nechce konfigurovat a spravovat (S)FTP server, protokol SCP je vhodným řešením.

Na počítač s běžícím SSH serverem zkopírujeme data z klientského počítače (soubor) příkazem:

$scp soubor uzivatel@ssh-server:/cesta-kam-kopirovat

Na místě ssh-server může být IP vzdáleného počítače nebo jeho jméno. Konkrétně: Řekněme, že kopírujeme mezi dvěma linuxovými (nebo obecně unixovými) systémy: ze složky Dokumenty na lokálním počítači chceme poslat soubor tabulka.ods na vzdálený server s IP adresou 192.168.1.10, přesněji do adresáře reporty, přičemž tento adresář je v uživatelském profilu v adresáři Zpravy. Zadáme:

$scp Dokumenty/tabulka.ods uzivatel@192.168.1.10:/home/uzivatel/Zpravy/reporty/

Kopírovat můžeme data i druhým směrem, tj. ze vzdáleného serveru do lokálního počítače:

$scp uzivatel@192.168.1.10:/home/uzivatel/Zpravy/reporty/tabulka.ods lokalni-adresar

V tomto případě se tedy ze vzdáleného serveru zkopíruje soubor tabulka.ods do našeho (lokálního) počítače (do adresáře lokalni-adresar).

Kopírujeme-li celý adresář, musíme použít parametr -r (rekurzivní kopírování). Navíc pokud vzdálený SSH server používá jiný než standardní port 22, musíme to aplikaci sdělit přes -P.

Názorně: Nyní chceme nahrát adresář zpravy na vzdálený počítač, na kterém SSH server používá port 53033. Do terminálu napíšeme:

$scp -P 53033 -r zpravy uzivatel@192.168.1.10:/home/uzivatel/Dokumenty

SCP a kopírování z Windows

Kromě terminálu, jenž je součástí SSH klientů ve Windows (viz výše), je k dispozici také grafická nadstavba pro SCP, jmenovitě WinSCP, což je velmi populární klient s příjemným a známým grafickým rozhraním. Práce s ním je snadná jako s každým podobným souborovým manažerem. kromě SCP podporuje také SFTP/FTPWinSCP je zcela zdarma.

Ke stažení: WinSCP