Introducere SSH sau secure shell

 

- este un program care permite accesul securizat la un sistem remote.

 

      Tot traficul de date este criptat, inclusiv schimbul de parole, eliminând astfel posibilitatea atacarii canalului de comunicatie. Nu toata lumea cunoaste puterea si capabilitatile acestui program utilitar, cum ar fi loginul fara parola, executarea automata de comenzi pe un sistem remote, sau chiar mountarea locala a unui director remote. Acest articol va descrie aceste operati si nu numai. SSH/SSHD SSH lucreaza in modul client-server ceea ce inseamna ca pe masina remote la care vrem sa ne conectam trebuie sa rulam un server. Serverul SSH, cunoscut si sub numele de SSHD, vine instalat implicit in majoritatea distributiilor Linux si in unele cazuri este pornit tot implicit la bootare. Mai multe informatii despre server gasiti cu ajutorul comenzii "man sshd". Trebuie amintit ca pentru comunicatie este folosit portul 22 TCP, asadar daca aveti un firewall functional pe server, accesul la acest port trebuie gestionat.

 

Pe calculatorul client, comanda se numeste simplu "ssh" iar parametrul principal de care are nevoie este numele utilizatorului si serverului la care trebuie sa se conecteze.

 

# ssh user1@remote_server

 

      Aveti nevoie de o parola pentru a accesa serverul, iar dupa introducerea acesteia veti fi prezentat cu o linie de comanda de genul "user1@remote_server:~$".

 

      Daca acest lucru s-a intâmplat, inseamna ca ati reusit sa va logati corect pe masina remote si puteti rula comenzi pe aceasta masina. Canalul de comunicatie intre server si client este criptat, aceasta fiind principala atractie pentru SSH. Pachetul software SSH folosit sub Linux se numeste OpenSSH, este dezvoltat la openssh.com de aceeasi echipa care dezvolta si proiectul OpenBSD. Protocolul de comunicatie implementat de OpenSSH se numeste SSH2 si este standardizat de IETF. Protocolul este descris intr-o serie de RFC-uri publicate de IETF. O serie de programe utilitare prezente in pachetul OpenSSH vor fi descrise in continuare. SFTP - o versiune securizata de FTP Permite ca si FTP copierea de fisiere de pe o masina pe alta, diferenta fiind ca in cazul SFTP tunelul prin care se desfasoara comunicatia este criptat. in FTP toate comunicatiile, inclusiv schimbul de parola, intre server si client sunt trimise in clar, ceea ce face slujba unui cracker foarte usoara in a compromite sistemul in cauza. SFTP foloseste pe post de server SSHD descris mai sus. SFTP se ruleaza in felul urmator:

 

# sftp user1@remote_server

 

si implementeaza majoritatea comenzilor pe care FTP le implementeaza. Pentru cineva obisnuit sa transfere fisiere folosind ftp din linia de comanda, sftp nu va prezenta nicio problema. Este pur si simplu acelasi lucru insa intr-un tunel criptat. SCP - copierea securizata de fisiere Alte program de transferat fisiere integrat in pachetul OpenSSH este SCP. Se ruleaza din linia de comanda si permite copierea oricarui fisier sau director de la sau catre o masina remote. Ca si in cazul lui SFTP, scopul utilitarului SCP este sa substituie programele gen ftp. Pe post de server se foloseste tot SSHD. Rularea programului arata in felul urmator: # scp fisier.txt user1@remote_server:~/ Aceasta comanda permite copierea lui fisier.txt pe un server remote si plasarea sa in directorul de baza al utilizatorului user1. in loc de ~/ se poate folosi o alta cale de exemplu /tmp sau /home/public sau orice alta cale unde utilizatorul are drept de scriere. Comanda arata similar pentru transferul invers (de pe serverul remote pe masina locala):

 

# scp user1@remote_server:~/file.txt.

 

      Astfel, fisierul file.txt este copiat de pe serverul remote si este plasat in directorul curent.

 

      Câteva optiuni folositoare: -r -pentru a copia directoare in mod recursiv incluzând si subdirectoare; -P port - pentru a folosi un port care nu este standard Interfete grafice pentru SCP Daca nu va place sa executati comenzi in consola si preferati interfete grafice puteti sa folositi Midnight Commander (yum install -y mc in Fedora). Acesta ofera un client grafic pentru SCP cu ajutorul optiunii shell link. Alte managere de fisiere precum Nautilus si Konqueror sunt capabile de conexiuni SCP. Introducând ssh://user1@remote_server:~/ in bara de adresa, rezulta o conexiunea catre o masina remote, astfel fisierele pot fi copiate ca si cum ar fi disponibile local. in mediu MS Windows, o aplicatie demna de mentionat este WinSCP. Are o interfata asemanatoare cu Total Commander si are un sistem de pluginuri astfel incât este posibil sa realizati printre altele si conexiuni TCP. SSH fara parole - generarea de chei Introducerea parolei pentru fiecare conectare prin SSH poate deveni la un moment dat enervanta.

 

      Pe de alta parte o conexiune nesecurizata reprezinta un risc. Solutia problemei este folosirea sistemului de cheie publica, cheie privata. Perechea de chei poate fi generata cu comanda ssh-keygen. Mai jos este un exemplu de generare de chei de tipul RSA. $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub.

 

The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

 

      Când sunteti intrebat de parola, puteti apasa tasta ENTER - in acest fel se va crea o cheie fara parola. Retineti ca a lasa o cheie fara parola poate fi o gaura majora de securitate. Daca aveti dificultati cu retinerea parolelor puteti sa folositi in Kde utilitarul Ksshagent si in gnome gnome-keyring-ssh-askpass. in momentul când ssh-keygen isi termina treaba, veti avea doua chei generate. Cheia privata se afla in /home/user1/.ssh/id_rsa si aceasta nu trebuie facuta publica niciodata. Cea de a doua cheie va fi in /home/user1/.ssh/id_rsa.pub iar aceasta o putem arata oricui.

 

      Presupunând ca vrem sa ne conectam la masina numita test de pe cea pe care am generat cheile, trebuie sa executam urmatoarea comanda:

 

# ssh-copy-id -i ~/.ssh/id_rsa.pub username@mystery.

 

      Vom fi rugati sa introducem parola pentru login, iar apoi cheia va fi copiata automat, creând daca este necesar directoarele si rezolvând problema cu permisiunile pe fisiere. Continutul fisierului de chei publice va fi adaugat in fisierul ~/.ssh/authorized_keys2 pentru chei RSA , si ~/.ssh/authorised_keys pentru chei DSA. Executarea de comenzi pe o masina remote Una din cele mai spectaculoase facilitati SSH este automatizarea executiei de comenzi pe masini remote. Deci, daca ne putem loga automat pe o masina remote, de ce sa nu executam acolo niste comenzi tot automat? De exemplu am putea implementa un fel de "remote alert". Sa ne imaginam ca pe un sistem remote rulam un webserver si dorim sa fim preveniti când acel sistem ramâne fara resurse. Evident ca putem sa ne trimitem un mail, putem insa aditional sa rulam o comanda care sa cânte o melodie pe sistemul nostru.

 

Codul ar arata cam asa:

 

# ssh user1@local_server 'play /usr/share/sounds/gaim/arrive.wav' X11

 

- rularea de aplicatii grafice de la distanta.

 

      Am vazut cum se ruleaza aplicatii remote din linia de comanda, sa vedem cum am putea rula aplicatii cu o interfata grafica. Una dintre facilitatile mai putin folosite ale SSH-ului este forwardarea protocolului X. Acest lucru ne poate permite sa rulam aproape orice aplicatie X de la distanta, fara a ne compromite securitatea muncii pe care o depunem.

 

      Este de ajuns sa ne conectam pe masina respectiva cu optiunea -X: # ssh -X user1@remote_server Astfel afisarea tuturor aplicatiilor ce necesita X11 executate de acum incolo vor fi forwardate pe serverul X11 local. X11 Forwarding se poate configura ca permanent prin editarea fisierului de configurare /etc/ssh/ssh_config file optiunea dorita fiind "ForwardX11 yes". SSH are abilitatea de a forwarda porturi TCP. Astfel, poate face ca un port remote sa apara pe o interfata locala sau vice versa. Odata ce acest forwarding a fost facut, un program se poate conecta la portul local si poate folosi serviciile remote ca si cum ar fi locale. in exemplul urmator descriem criptarea comunicatiei dintre un server IRC si un client IRC cu ajutorul unui tunel simplu setat prin ssh.

 

      Masina locala este "localhost" si are o adresa ip "127.0.0.1", de pe aceasta masina pornim tunelul si rulam clientul IRC. Masina remote este "server.example.com" pe care rulam serverul SSH si serverul IRC unde trebuie sa ajunga datele clientului nostru IRC (folosesc pentru simplicitate exemplul din man ssh). incepem prin a construi tunelul: # ssh -f -L 1234:localhost:6667 server.example.com sleep 10 apoi pornim clientul IRC prin tunelul construit anterior: # irc -c '#users' -p 1234 pinky 127.0.0.1 Utilizatorul pinky intra pe canalul #users folosind tunelul ssh care incepe pe masina locala a utilizatorului la portul TCP 1234 si se termina pe server.example.com la portul 6667 care este portul standard pentru servicii IRC. Exemplu tunelare SAMBA Ne folosim de facilitatea de tunelare pentru a face un mount SAMBA pe un canal encriptat. Pentru aceasta avem nevoie ca serverul SAMBA si serverul de ssh sa ruleze pe aceeasi masina remote.

 

Tunelarea SAMBA se face in doi pasi:

 

setarea tunelului si apoi mountarea shareului SAMBA prin tunel. # ssh -L 9999:localhost:139 user@server Comanda de mai sus va forwarda portul 139 de pe masina remote catre "localhost" pe portul 9999. SSH va permite forwardarea de porturi privilegiate TCP numai in cazul rulari ca root, asadar pentru utilizatorii non-root singura solutie este sa ruleze pe porturi peste 1024. Tunelul este up, dar cum mountam? O problema este ca rezolutia de nume se face in SAMBA prin UDP si ssh nu poate sa forwardeze trafic UDP. Trucul este sa ii indicam comenzii "smbmount" sa se conecteze la interfata de retea specifica si la portul TCP in mod direct, fara a folosi rezolutia de nume (examinati "man smbmount" pentru mai multe informatii).

 

      Pentru a mounta prin SSH deschideti un nou shell si inlocuiti [mount-point] si [username] cu valorile relevante pentru dumneavoastra: # smbmount //localhost/share [mount-point] -o username=[username],ip=localhost,port=9999 in mod normal //localhost ar trebui sa fie numele NET-BIOS al serverului SAMBA, dar in acest caz optiunea "ip=" trece peste el si rezolutia de nume nu este folosita, "smbmount" se conecteaza direct la interfata de retea "localhost" pe portul 9999. Este de obicei o buna idee de-a unmounta share-ul SAMBA inainte inchiderii conexiuni prin tunel (vezi comanda smbumount). Tunele VNC prin SSH Acesta nu este cu mult diferit de tunelul SAMBA, de obicei VNC foloseste portul 5900 TCP care poate fi forwardat cu succes.

 

      Exemplul urmator va permite unui utilizator sa se conecteze la o sesiune existenta X11 sau RDP pe o masina linux. Porniti tunelul ssh de pe masina locala catre server astfel: # ssh -L 5900:localhost:5900 [user]@[linux-box] Porniti orice tip de VNCVIEWER si conectati-va pe localhost portul 5900, apoi introduceti parola. Trecerea peste mai multe hopuri cu ssh Comanda folosita pentru a ne conecta de la workstation1 la workstation2 folosind hostul server ca un proxy:

 

# ssh -t user@server "ssh user@workstation2".

 

      Vom fi nevoiti sa introducem parola de doua ori, prima data pentru hostul server, apoi pentru hostul workstation2. Forwardarea X -ului va functiona si ea cu conditia configurari corecte a ambelor noduri. ''

Despre OpenSSH
  • Avem nevoie de ajutorul vostru, am trimis mai multe articole, astept raspuns 1 days ago