Kategória: Linux a sieť

Zmenené: 17. august 2010

Používame SSH

Často sa stretávam s potrebou bezpečného pripojenia k iným počítačom. Táto požiadavka je dôležitá najmä pri prístupe k vzdialeným počítačom cez „slobodný” internet, kde číha kopa ľudí (alebo lepšie robotov) len na to, kedy zachytí Vaše dáta, či heslo.

SSH (Secure SHell) je softvérové riešenie sieťového zabezpečenia, je založené na architektúre klient/server, pričom inštalácia na jednotlivých strojoch môže obsahovať len klienta, len server alebo oba články architektúry. Tak môže počítač len prijímať spojenia od iných strojov, poskytovať pripojenie k iným strojom alebo oboje.

V skutočnosti SSH nie je žiadny shell, nie je to príkazový intrepreter. SSH len vytvára kanál pre spustenie shellu na vzdialenom počítači, podobne ako napríklad telnet, ale spojenie so vzdialeným počítačom je šifrované. Pri jeho používaní nezabúdajte, že SSH Váš ppočítač neochráni pred útokmi zameranými na vlámanie sa do počítača, odmietnutie služieb, či pred nežiadúcim softvérom (vírusy, trojské one atď.), ale ponúka „len! riešenie pre šifrovanie a autentizáciu.

Inštalácia

Pred inštaláciou sa musíte rozhodnúť, ktoré súčasti chcete. Teda, či chcete len klienta alebo aj server. Debian ponúka na nainštalovanie tri balíčky:

  • ssh - poskytuje aj klienta aj server SSH,
  • ssh-client – klient SSH,
  • ssh-server – server SSH,

Všetky tri tieto balíčky sú založená na riešení OpenSSH. Takže si nainštalujeme zvolený balíček, napríklad metabalík ssh:

aptitude install ssh

Inštalátor sa v Debiane postará o všetko potrebné a po skončení inštalácie je SSH server pripravený na používanie. Môžete si overiť, že ssh server skutočne beži pomcoou zobrazenia otvorených portov (sshpredvolene používa port 22):

netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
...
tcp6       0      0 :::22                   :::*                    LISTEN
...

Používanie

SSH poskytuje pripojenie v príkazovom riadku. Existuje výborný program PuTTY, ktorý beží vo Windows a umožňuje pripajánie na vzdialené stroje (okrem iného) aj pomocou SSH. akže naspäť k SSH, otvorte si konzolu alebo jej emulátor (konsole, xterm) a skúsme vytvoriť spojenie na SSH server. Povedzme, že sa chceme pripojiť na stroj s menom webserver, ktorý má IP adresu 192.168.0.132. Začneme pomocou IP adresy:

ssh 192.168.0.132
The authenticity of host '192.168.0.132 (192.168.0.132)' can't be established.
RSA key fingerprint is 25:8b:19:af:ee:c6:6c:67:4c:5a:f4:63:50:20:fb:6b.
Are you sure you want to continue connecting (yes/no)?

Všimnite si upozornenie, ktoré vraví, že spojenie nemôže byť vytvorené, pretože náš SSH klient nepozná otlačok (fingerprint) vzdialeného servera a pýta sa nás, či má pokračovať v pripojení. Toto je prvá ochrana, ktorú SSH ponúka a spočíva v tom, že každý SSH server má svoj identifikačný odtlačok, podľa ktorého SSH klient rozpoznáva, či odpovedajúci stroj je ten, za ktorý sa vydáva. Pri prvom pripojení nanejaký SSH server to nie je na závadu a stačí odpovedať yes (celým slovom) a vytvorenie spojenia bude pokračovať:

Warning: Permanently added '192.168.0.132' (RSA) to the list of known hosts.
slavko @192.168.0.132's password:

Po zadaní hesla ste pripojený na vzdialený počítač. Ak sa Vám upozornenie na neznýmy odtlačok objaví v prípade servera, ku ktorému ste sa už pripojili, je to podozrivé a mali by ste tomu venovať náležitú pozornosť, hoci nemusí nevyhnutne ísť o klamlivý server (možno len administrátor zmenil kľúč servera). Zo vzdialeného stroja sa odhlásite rovnako akoby ste boli prihlásený lokálne, takže zadajte logout alebo stlačte Ctrl+D.

Samozrejme, môžete sa prihlasovať aj pomocou doménového mena, ale keď to skúsite, SSH klient znova vypíše upozornenie o neznámom odtlačku. Ako je to možné? Jednoducho, klient si poznačil odtlačok servera, ktorý pomenoval IP adresou, ale teraz sme použili jeho doménové meno, pre ktoré ešte záznam neexistuje:

ssh webserver
The authenticity of host 'webserver (192.168.0.132)' can't be established.
RSA key fingerprint is 25:8b:19:af:ee:c6:6c:67:4c:5a:f4:63:50:20:fb:6b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'webserver' (RSA) to the list of known hosts.
slavko@webserver's password:

Ak vytvoríte prvé spojenie pomocou doménového mena, bude klient poznať odtlačok aj pre IP adresu.

Takto zapísaný príkaz Vás na vzdialenom stroji prihlási pod aktuálnym používateľom, teda ako používateľa, ktorý je práve na vašom stroji prihlásený. Niekedy je potrebné prihlásiť sa pod iným používateľským menom, napríklad preto, že máte na rôznych strojoch rôzne účty. V takomto prípade je treba pred meno počítača (alebo IP adresu) pridať príslušné používateľské meno a od zvyšku ho oddeliť zavináčom:

ssh ferko@webserver

prípadne môžeme za meno servera priamo zadať príkaz, ktorý má byť na vzdialenom počítači spustený:

ssh root@webserver "aptitude update && aptitude upgrade"

Tento príkaz (po zadaní hesla) zaktualizuje zoznam balíkov a zaktualizuje nainštalovaný softvér. Po dokončení sa odhlási.

Autentifikácia kľúčom

Okrem autentifikácie heslom, ktorú sme vyskúšali na začiatku, poskytujeSSH možnosť autentifikácie pomocou kľúčov, teda presnejšie pomocou páru kľúčov. Pár kľúčov píšem preto, že kľúč sa skladá z dvoch častí, a to verejného a súkromnho kľúča. Tento pár kľúčov je možné vygenerovať pomocou nástroja ssh-keygen. Pri vytváraní kľúča sa Vás program spýta na umiestnenie súboru, kam má byť kľúč vygenerovaný a na heslo. Áno heslo, ale tentokrát heslo ku kľúču, takže si môžete zadať nové heslo alebo použiť prázdne. Ak nejaké heslo nastavíte, bduete o neho požiadaný pri každom použití kľúča, čo síce zvyšuje bezpečnosť, ale znižuje pohodlie:

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/slavko/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/slavko/.ssh/id_rsa.
Your public key has been saved in /home/slavko/.ssh/id_rsa.pub.
The key fingerprint is:
d5:01:5b:35:03:4f:41:fb:df:36:e4:91:0f:e7:4c:a9 slavko@bonifac

Takto to teda vyzerá, keď na všetky otázky odpoviete len stlačenm enter. Pozrime sa teda do adresára ~/.ssh, kam sme nechali vygenerovať kľúče:

ls -l ~/.ssh/
-rw------- 1 slavko slavko 1,7K  6.apr 15.36 id_rsa
-rw-r--r-- 1 slavko slavko  396  6.apr 15.36 id_rsa.pub

V súbore is_rsa je súkromný kľúč, ktorý treba chrániť rovnako ako heslo (alebo ešte lepšie), pretože práve pomocou tohoto súkromného kľúča sa identifikujete. V súbore id_rsa.pub je kľúč verejný, ktorý poskytnete serveru, aby Váš súkromný kľúč dokázal rozpoznať. Ale vygenerovať kľúče nestačí, ešte je potrebné verejný kľúč preniesť na server. Na serveri sú verejné kľúče uchovávané v súbore ~/.ssh/authorized_keys a tento súbor môže obsahovať aj viac ako jeden kľúč, čiže mohli by ste súbor s verejným kľúčom prekopírovať na server a tam jeho obsah pripojiť k spomínanému súboru authorized_keys. Alebo môžete požiť nástroj ssh-copy-id, ktorý sa o to postará:

ssh-copy-id webserver
slavko@webserver's password:
Now try logging into the machine, with "ssh 'root@webserver'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Ako môžete vidieť, stačí zadať meno servera a nástroj kľúč prenesie. Rovnako ako pri ssh, aj v tomto prípade je možné použiť meno používateľa a zaviná, na prenesenie kľúča do príslušného účtu. Ak ste vygenerovali kľúč do iného ako predvoleného súboru, môžete tento súbor zadať pomocou prepínača -i:

ssh-copy-id -i /niekde/moj.kluc root@webserver

A teraz sa môžete prihlásiť pomocou SSH a tešiť sa z toho, že server už heslo nepýta.

SSH agent

Ak predsa len vyžadujete väčšiu bezpečnosť, vrelo odporúčam použť heslo (passphrase) aj pre kľúč, hoci jeho zadávanie môže byť otravné. Aby to až také otravné zase nebeolo, ponúka OpenSSH nástroj ssh-agent. Tento nástroj umožňuje to, že zadáte heslo len raz a potom, až do odhlásenia, poskytuje heslo za Vás. Ak sa pýtate na čo to je dobré, tak ma napadá najmä prípad, keď máte pripravené skripty pracujúce cez SSH a tam môže byť zadávanie hesla dosť otravné. Ale o agentovi niekedy inokedy.