Introducere
SSH sau Secure Shell este un protocol care ne permite să schimbăm date, între două calculatoare într-un mod sigur. În general, folosim ssh când avem o maşină (server) la distanţă pe care vrem s-o controlăm. De cele mai multe ori dorim să avem o consolă pe acea maşină şi un mod de tranfer al fişierelor.
Aspecte teoretice
SSH foloseşte criptarea asimietrică (cunoscută şi sub numele de criptare cu chei publice) pentru autentificare.
RSA
RSA este un algoritm de criptare ce foloseşte chei publice şi chei private. Practic în aceste chei publice şi private este câte un număr (mare) nedeductibil unul din altul, dar care, împreună posedă anumite proprietieţi. Aceste proprietăţi sunt necesare pentru a putea obţine următorul comportament:
- numai cu cheia publică se poate cripta
- numai cu cheia privată se poate decripta ce a fost criptat cu acea cheie publică
- cheile nu se pot deduce una din alta
Din câte se observă avem perechi de forma cheie publică - cheie privată unice. Desigur, trebuie garantate identităţile celor două persoane care comunică, trebuie schimbate şi cheile publice -- aceasta se realizează (în SSH-2) cu algoritmul Diffie-Hellman.
DSA
DSA este un alt algoritm asemenător RSA-ului.
Autentificarea
Există mai multe tipuri de autentificări printre care:
- keyboard-interactive -- ni se cere userul şi parola la logare
- prin cheia publică -- nu ni se cere parola; autentificarea se bazeaza şi pe cheia privată pe care o deţinem. Cheia publică este copiată local, în direcotorul contului cu care vrem să ne logăm (pe server).
Autentificarea prin cheia publică este utilă atunci când nu trebuie să ştim parola utilizatorului. Pentru a folosi acest tip de autentificare, cineeva trebuie să copieze în directorul contului (pe server) cheia publică asociată identitaţii (cheii private) cu care ne conectăm.
Aspecte practice
Există două implementări mai folosite ale SSH-ului: OpenSSH (cross-platform -- folosit în linux, unix) şi PuTTY (folosit în Windows).
OpenSSH
Instalare
Este dependetă de distro:
| # emerge openssh | gentoo |
| apt-get install ssh ?? | ubuntu, debian |
Conectare
Fără cheie publică
$ ssh user@server.com
La prima logare vom fi întrebaţi dacă suntem de acord să primim cheia publică a serverului la care ne contăm. Această cheie este stocată local, la logările următoare nu mai este necesar acest pas. Ni se va cere parola. Dacă totul a decurs în regulă ar trebui să vedem acum o consolă interactivă:
lucian@motanul_danila-laptop ~ $ ssh user@server.com Linux server.com 2.6.18-6-686 #1 SMP Fri Jun 6 22:22:11 UTC 2008 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Jul 18 10:39:39 2008 from 79.117.38.77 user@server.com:~$ ls Maildir public_html svn user@server.com:~$
Cu cheia publică
- Generarea cheii publice $ ssh-keygen -t rsa
Vă va întreba unde va fi salvată perechea cheie publică- cheie privată; de preferat să fie salvată în ~/.ssh, doarece acest director are drepturile setate bine în general, şi sub ce nume, să zicem cspay_rosedu. Vă va mai cere şi un passphrase -- această este o parolă care este cerută ori de câte ori se vrea folosirea cheii private; este recomandat să punem una, dacă vrem să punem pe un stick cheia privată; se poate lasa blank. Iată cum ar arăta:
lucian@motanul_danila-laptop ~ $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/lucian/.ssh/id_rsa): /home/lucian/.ssh/cspay_rosedu Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lucian/.ssh/cspay_rosedu. Your public key has been saved in /home/lucian/.ssh/cspay_rosedu.pub. The key fingerprint is: 2b:90:02:ea:18:3a:3a:f5:56:7d:bd:5d:57:db:d2:bf lucian@motanul_danila-laptop lucian@motanul_danila-laptop ~ $
- Trimiterea cheii publice; sunt două situaţii:
- dacă ştim parola de pe userul la care vrem să ne logăm folosim $ ssh-copy-id -i /home/lucian/.ssh/cspay_rosedu cspay@rosedu.org
- dacă nu ştim parola trimitem cuiva care ştie parola cheia publică (/home/lucian/.ssh/cspay_rosedu.pub -- a se vedea extensia .pub)
- Dacă s-a cheia publică a ajuns unde trebuie, prin una dintre cele două căi când încercăm $ ssh -i /home/lucian/.ssh/cspay_rosedu cspay@rosedu.org ar trebui să nu ne mai ceară parola şi să avem direct consola
- Exemple de comenzi:
- $ ssh -i /home/lucian/.ssh/cspay_rosedu cspay@rosedu.org -- obţinerea consolei
- $ scp -i /home/lucian/.ssh/cspay_rosedu site.php cspay@rosedu.org:~/public_html/site_nou.php -- copierea fişierului local site.php pe sever, în fişierul ~cspay/public_html/site_hou.php
OpenSSH
Instalare
Se descarcă de aici installerul; se instalează. În momentul de faţă ar trebui să avem binare care fac acelaşi lucru ca şi-n linux (ssh-keygen == puttygen.exe; ssh == putty.exe; scp == pscp).
Conectare
Ar trebui să fie la fel ca-n linux, numai că se utilizează o interfaţă grafică. Iată un tutorial despre cum se generează şi foloseşte o cheie cu PuTTY (părţile cu Installing the public keys pot fi sărite); din păcate nu am găsit nimic cu pscp, nu ştiu dacă functionează.
