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ă

  1. 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 ~ $ 
  1. 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)
  1. 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
  2. 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ă.