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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
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:
1 2 3 4 5 6 | |
… nebo jednoduše složitým příkazem (viz SSH jako roura):
1 | |
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¶
- Vysvětlete význam výše uvedených příkazů a popište, co který z nich dělá.
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;
1 | |
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:
1 2 3 | |
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.
1 2 3 4 5 | |
SSH jako roura¶
SSH lze použít jak rouru pro datový proud mezi dvěma systémy.
-
To co program
sshdostane na svůj standardní vstup, to předá na standardní vstup programu spuštěného na vzdáleném počítači. -
To co program na vzdáleném počítači pošle na svůj standardní výstup, to se objeví i na standardním výstupu programu
ssh.
Například:
1 | |
- Na vstup programu
sshpřijde souborlokalni_soubor, sshho přenese na vstup vzdáleného programucat,- vzdálený program
catuloží obsah lokálního souboru na konec vzdáleného souboru, - program
mkdirpřenos neovlivní, protože ten nečte standardní vstup.
SSH tunel¶
Pomocí SSH je možné vytvářet šifrované kanály:
1 | |
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
1 | |
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.

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.)
1 | |
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:
1 | |
Poté je možné připojit se na tento počítač na lokálním portu 4000 příkazem
1 | |
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:
1 | |
Na vzdálenou plochu se nyní můžu připojit na lokálním portu 5000 například takto:
1 | |
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í.