201/489

Secure Shell

Obsah:

  1. Vzdálené přihlášení
  2. Přenos souborů
  3. Pohodlíčko
  4. Provádění vzdálených příkazů
  5. SSH jako roura
  6. SSH tunel

SSH umožňuje bezpečnou komunikaci mezi dvěma počítači, která se využívá pro zprostředkování přístupu k příkazovému řádku, kopírování souborů a též jakýkoliv obecný přenos dat (s využitím síťového tunelování). Zabezpečuje autentizaci obou účastníků komunikace, transparentní šifrování přenášených dat, zajištění jejich integrity a volitelnou bezeztrátovou kompresi. Server standardně naslouchá na portu TCP/22

Hezké články o SSH
http://www.abclinuxu.cz/clanky/bezpecnost/openssh-bezpecne-a-pohodlne
http://www.abclinuxu.cz/clanky/bezpecnost/openssh-vice-nez-jen-secure-shell

Vzdálené přihlášení

Základem je příkaz:

ssh uzivatel@nekde.dalelo.tld

Pokud překontrolujeme identitu serveru (jeho fingerprint) a zadáme dobře heslo je nám zpřístupněn vzdálený shell.

Úkol

  1. Přihlaste se pomocí SSH na svůj server
  2. Všimněte si jak se změní prompt -- výzva vlevo od kurzoru.

Přenos souborů

Přenos souborů je možný pomocí příkazu scp. Pracuje se s ním podobně jako s klasickým cp, ale před název souboru je třeba zapsat ještě doménové jméno nebo IP adresu.

upload

scp /muj/soubor uzivatel@nekde.dalelo.tld:/cesta/na/vzdalenem/stroji

download

scp uzivatel@nekde.dalelo.tld:/cesta/na/vzdalenem/stroji /muj/soubor 

Velice důležitá je dvojtečka :, která odděluje hostitelské jméno a cestu k souboru.

Úkol

  1. Přeneste z lokálního počítače soubor /usr/share/doc/bombardier/README na váš server do domovského adresáře superuživatele root.
  2. Na serveru zkontrolujte správnost přeneseného souboru programem md5sum.
  3. Soubor README na serveru v textovém editoru pozměňte.
  4. Stále z konzole na lokálním počítači přeneste soubor README se serveru do lokálního adresáře /tmp.

Pokud přenášíme více souborů může se nám hodit SFTP -- SSH file transfer protocol nebo FISH -- Files transferred over shell protocol. Ty se často používají jako náhrada za ne tolik bezpečné FTP. Dá se říct, že každý pokročilejší správce souborů tyto protokoly podporuje. Já osobně používám a doporučuji program lftp.

Úkol

  1. Spusťte program Krusader.
  2. Připojte se na svůj server pomocí protokolu FISH.
  3. Přeneste si tam a zpátky několik souborů.

| navigace |

Pohodlíčko

Aby nebylo nutné stále znovu a znovu zadávat heslo, je možné ověřovat identitu pomocí klíče (souboru, uloženého na disku). Celý proces autentizace je založen na asymetrické kryptografii. Nejprve je nutné vygenerovat si keyPair. To udělá příkaz ssh-keygen.

user@pc:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/m/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/m/.ssh/id_rsa.
Your public key has been saved in /home/m/.ssh/id_rsa.pub.
The key fingerprint is:
61:07:e5:02:3f:2c:68:61:2e:fd:ba:e7:b4:45:6a:25 user@pc
The key's randomart image is:
+--[ RSA 2048]----+
|    o . ...      |
|   + o + o       |
|  . = . B o      |
|   o . o =       |
|      E S        |
|     . =         |
|    . + .        |
|     +.o         |
|    .oo          |
+-----------------+

Program se nejprve ptá na umístění klíče a poté na passphrase. Vzniknou dva soubory -- privátním klíčem a veřejným klíčem (veřejný klíč má příponu .pub). Veřejný klíč ne nutné přenést na server a uložit ho do souboru ~/.ssh/authorized_keys vzdáleného uživatele. To je možné provést složitě jednoduchými příkazy:

user@pc:~$ scp ~/.ssh/id_rsa.pub uzivatel@pocitac.nekde.dalelo.tld:/tmp
user@pc:~$ ssh uzivatel@nekde.dalelo.tld


uzivatel@daleko:~$ mkdir ~/.ssh
uzivatel@daleko:~$ cat /tmp/id_rsa.pub >>~/.ssh/authorized_keys

... nebo jednoduše složitým příkazem (viz SSH jako roura):

user@pc:~$ ssh <~/.ssh/id_rsa.pub uzivatel@nekde.dalelo.tld "mkdir ~/.ssh; cat >>~/.ssh/authorized_keys"

V souboru ~/.ssh/authorized_keys může být klíčů i víc. Na každém řádku jeden.

Pokud jste při tvorbě klíče zadali prázdné passphrase je možné hlásit se bez hesla. Důrazně ale doporučuji passphrase zadat. Lze totiž použít program ssh-agent a passphrase zadávat pouze jednou.

Úkol

Provádění vzdálených příkazů

Programu ssh můžeme jako parametr předat příkaz, který se má na vzdáleném počítači spustit;

ssh uzivatel@nekde.dalelo.tld prikaz

Vytvoří se SSH spojení, na vzdáleném počítači se spustí příkaz a jeho výstup se zobrazí na lokálním terminálu. Jakmile je příkaz ukončen SSH spojení se ukončí.

Například pokud bychom chtěli zjistit čas na vzdáleném počítači:

user@pc:~$ ssh uzivatel@nekde.dalelo.tld date
Ne led  5 19:47:09 CET 2014
user@pc:~$ 

Pokud je potřebné spustit více příkazů je nutné je oddělit středníkem. Protože ale středník má nabýt svého významu až na vzdáleném počítači je nutné aby se choval jako běžný znak a nikoli metaznak. Proto dáme příkaz do uvozovek.

user@pc:~$ ssh uzivatel@nekde.dalelo.tld "hostname; echo --------; date;" 
nekde.daleko.tld 
--------
Ne led  5 19:51:07 CET 2014
user@pc:~$ 

SSH jako roura

SSH lze použít jak rouru pro datový proud mezi dvěma systémy.

Například:

user@pc:~$ ssh <lokalni_soubor uzivatel@nekde.dalelo.tld "mkdir ~/test; cat >>~/test/vzdaleny_soubor"
  1. Na vstup programu ssh přijde soubor lokalni_soubor,
  2. ssh ho přenese na vstup vzdáleného programu cat,
  3. vzdálený program cat uloží obsah lokálního souboru na konec vzdáleného souboru,
  4. program mkdir přenos neovlivní, protože ten nečte standardní vstup.

SSH tunel

Pomocí SSH je možné vytvářet šifrované kanály:

$ ssh -N -L 8008:localhost:80 borec@hroch.spseol.cz

Tento příkaz provede spojení uživatele borec ne server hroch.spseol.cz a propojí vzdálený port 80 s lokálním portem 8008. Nenechte se zmást hostitelským jménem localhost to se bere z pohledu vzdáleného počítače a uvedený příkaz má stejný efekt jako

$ ssh -N -L 8008:hroch.spseol.cz:80 borec@hroch.spseol.cz

Parametr -N říká, že se nemá spouště žádný příkaz, tedy ani shell a jen se vytvoří tunel.

V tuto chvíli můžete zadat do prohlížeče adresu http://localhost:8008/~nozka/hroch a můžete se přesvědčit, že požadavky, které přichází na lokální port 8008 jsou přeposílány na vzdálený port 80. Vtip je v tom, že toto spojení je šifrované.

Konfigurace přesměrování portů v programu PuTTY.
putty

K čemu je to dobré?

Představme si následující modelovou situaci: Jste připojení k Internetu z některé veřejné sítě například ve škole nebo v kavárně. Z bezpečnostních důvodů je zde ale zakázán port 25 a vy potřebujete nutně odeslat e-mail. (Důrazně žádám všechny šťouraly, kteří chtějí namítat, že mám použít web-mail, aby nic neříkaly.)

student@skola:$ ssh -N -L 3000:smtp.mujposkytovatel.cz:25 borec@pc.doma.tld

Vytvoří se spojení mezi lokálním počítačem a pc.doma.tld. Lokální port 3000 bude přesměrován na port 25 počítače smtp.mujposkytovatel.cz skrze pc.doma.tld. Nyní je možné odeslat e-mail na lokální port 3000.

K čemu je to dobré? II

Pro větší názornost ještě jeden příklad: Máte malou domácí síť ve které je několik počítačů a vy na ně potřebujete vzdáleně přistupovat (například ze školy), ale máte jen jednu veřejnou IP adresu a proto je z Internetu dostupný je jeden počítač (pc.doma.tld).

Pokud se chci připojit pomocí SSH (port 22) na počítač, který má ve vnitřní síti adresu 192.168.68.1 spustím příkaz:

student@skola:$ ssh -N -L 4000:192.168.68.1:22 borec@pc.doma.tld

Poté je možné připojit se na tento počítač na lokálním portu 4000 příkazem

student@skola:$ ssh -p 4000 uzivatel@localhost 

Pokud bych požadoval, připojit se na vzdálenou plochu Windows stanice (port 3389) na počítači s vnitřní IP adresou 192.168.68.2 spustím příkaz:

student@skola:$ ssh -N -L 5000:192.168.68.2:3389 borec@pc.doma.tld

Na vzdálenou plochu se nyní můžu připojit na lokálním portu 5000 například takto:

student@skola:$ rdesktop -u Aministrator localhost:5000

Pokud by bylo potřebné provést opačnou akci, tedy že vzdálený port přesměrujeme na lokální, použijeme parametr -R. Dalším zajímavým parametrem v souvislosti s tunelováním je -f, který před spuštěním příkazu umístí SSH na pozadí.

| navigace |

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net