Tutorial de SSH.

Ce e ssh si de ce imi trebuie? Pe scurt: Ca sa nu fii hakuit cand povestesti/accesezi resurse la distanta. Dupa mine ssh ofera cel mai bun raport siguranta/comoditate!

Se poate accesa git si fara ssh? Cred ca da, dar cu siguranta vei tasta user/parola pana te saturi. Si exista riscul sa fii hakuit.

Ce e ssh? (mai lung)

  1. E o metoda de a crea un “tunel” intre 2 puncte, tunel care garanteaza ca:

  • Te conectezi la masina la care vrei sa te conectezi (si nu la un hacker)

  • Masina la care te conectezi se asigura ca esti autorizat sa accesezi resursele

  • Nici un bit “secret” (aka parola sau cheie privata) nu pleaca de pe calculatorul tau

  • Poti “forwarda” un protocol nesecurizat prin acest tunel ssh

  • Multe alte tool-uri sunt facute sa functioneze cu ssh. Daca ai acces ssh, cu putina indemanare, poti lucra pe calculatorul de la distanta, ca si cum ai lucra local

  1. Ask google ca sigur exista explicatii mai bune.

Cum functioneaza?

Ai o pereche de chei. Cheia publica si privata.

Cheia privata trebuie sa ramana intr-un loc sigur, pe calculator. Poate fi protejata cu o parola, in caz ca cineva iti acceseaza neautorizat laptopul (eg se fura laptopul). Cheia privata encripteaza traficul si valideaza faptul ca esti cine spui ca esti.

Cheia publica e well, publica! Ea se pune pe calculatorul destinatie, unde vrei sa te conectezi. Doar cheia privata poate fi folosita pentru a “deschide” cheia publica. Asa ca tu ca user, poti da la un coleg cheia publica. Peste un timp, cand vreti sa comunicati la distanta, colegul tau va sti ca esti tu, din cauza ca doar tu ai cheia privata. Nu poate interveni o tertza persoana intre voi ca sa spioneze sau sa altereze traficul. Conditia zero e ca transferul de cheie publica sa se faca pe un canal mai sigur (eg iti da personal cheia). Bun, scenarii un pic SF, dar sunt script-uri care “spioneaza” si altereaza exact acest schimb de chei.

Teoretic, cheia privata este accesata de un program special, care, e un fel de intermediar intre programele care vor sa acceseze resurse la distanta, si resursa respectiva. Alte soft-uri care vor sa comunice prin ssh (eg IDE-ul, git-scm, toate folosesc acest intermediar)

Pe scurt, trebuie sa:
  1. Generam o pereche de chei (o singura data)

  2. Punem cheia publica pe calculatorul de la distanta (o singura data, pe fiecare masina pe care vrem sa ne conectam)

  3. Ne conectam (well, de fiecare data cand vrem sa ne conectam)

Generarea de chei

Atat pe windows 10 cat si pe Linux exista OpenSSH. Pentru a testa ca aveti OpenSSH deschideti o consola si tastati:

ssh -V

Daca apare versiunea, exista OpenSSH pe calculator.

Daca apare o eroare, google: “How to install OpenSSH on xxx”. Pe windows 10, trebuie activat de la Features. Pe linux, sudo apt-get sau echivalent. Atentie, pe windows, va recomand sa puneti doar clientul, NU si serverul.

Primul pas, generarea cheii. Deschizi o consola (bash sau cmd) si dai:

ssh-keygen -t rsa -b 4096

Adica, fa-mi o cheie de tip RSA (cam cel mai comun), de 4096 biti lungime. Puteti specifica unde se salveaza cheia (id_rsa e bine), sa specificati o parola (passphrase) recomandat daca lucrati pe laptop, dar, poate fi adaugat si dupa.

Dureaza cateva secunde dupa care cheia e salvata. In folderul .ssh gasit in C:\users\username\ sau /home/username/ gasiti 2 fisiere: id_rsa si id_rsa.pub. Cel cu .pub e cheia publica.

RSA e un standard mai vechi deci mai bine suportat. Deocamdata nu am avut probleme cu el. Exista si standarde mai noi. Google: EdDSA si how to generate EdDSA key with OpenSSH.

Dupa ce o sa se faca un update la windows, veti putea “ingropa” cheia privata adanc in windows, cu ssh-agent. Deocamdata e dezactivat pentru ca exista ceva conflicte (distributia de pe Windows e mai veche). Pe Linux, rar am avut probleme, dar daca sunt, google it. Pe Linux am preferat sa encriptez toata partitia cu /home/ si atunci nu am mai avut stress cu parola pe cheia privata.

Punem cheile pe “calculatorul” de la distanta

Aici e nevoie de acces la masina respectiva. Ori acces fizic, ori va rezolva ‘admin-ul’ ori aveti o alta metoda de autentificare (ex user/parola), ori un portal web in care va autentificati.

Sunt doua cazuri, vreti sa accesati o masina (eg un calculator puternic partajat de mai multi) sau vreti sa accesati alt tip de resurse prin ssh (exemplu concret, acces la un repository git)

Pentru acces la git, trebuie sa intrati prin portalul web al serviciului, la setari si sa va salvati acolo cheia publica.

Pe un server/workstation

Pentru linux, trebuie sa “legati” cheia publica de contul unui utilizator existent. In directorul home al userului (fie /home/user/ sau C:\users\user) exista un director “ascuns” .ssh/.

Pentru a lega cheia publica de acest user, trebuie sa faceti copy/paste pe un rand nou, in fisierul ~/.ssh/authorized_keys. Daca nu exista, il creati.

Alternativ, folositi de pe calculatorul dvs comanda ssh-copy-id daca deja aveti acces cu user/parola (google it).

Pentru un server windows, puteti face acelasi lucru odata ce activati serverul de ssh (sshd). Inainte sa deschideti un server de ssh pe o masina expusa public, CITITI cu atentie niste documentatii si “best practices”.

Portalul Github:

Va logati pe github.com, dati click pe sageata de langa user (dreapta sus) si intrati la Settings.

Apoi, SSH and GPG Keys, si Add New. Copy paste la continutul fisierului id_rsa.pub

_images/cheie_github.png

Gitlab (instanta gazduita de UTCN):

Va logati, dati click pe sageata de langa user (dreapta sus) si intrati la Settings.

Mergeti la SSH Keys si copy paste la continutul fisierului id_rsa.pub

_images/cheie_gitlab.png

Acces la resursa de la distanta

Aici e simplu, dati comanda:

ssh user@adresa

Adresa e adresa masinii pe care vreti sa o accesati. Atentie, user se refera la user-ul Linux sau Windows in a carui folder .ssh ati copiat cheia (unde ati facut append la authorized_keys) Ar trebui sa va deschida o consola (cmd sau bash) la calculatorul de la distanta.

Pentru a testa cheia legata de contul vostru de github, intr-o consola:

ssh -T git@github.com

Ar trebui sa va zica “Hi xxx! You’ve successfully authenticated, …”

Cam la fel si pe gitlab:

ssh -T git@gitlab.utcluj.ro

Alte tool-uri

Ecosistemul este foarte mare. Va enumar cateva care va sunt utile(google them)

  • ssh-copy-id ca sa puneti cheia publica, pe o masina la care deja aveti acces cu user/parola

  • ssh-keygen pentru alte optiuni (eg adaugare/scoatere passphrase)

  • ssh-agent pentru setari avansate de securitate

  • rsync pentru transfer de fisiere foarte usor intre calculatoare (probabil doar Linux)

  • Bitvise Tunellier, un client Windows, de SSH.

  • WinScp pentru transfer GUI de fisiere, peste ssh.

  • .ssh/ssh_config pentru a “salva” adresele mai frecvente. Merge si pe win, afaik!

  • Putty, nerecomandat de mine, dar alternativa pentru soft-urile care nu stiu lucra cu OpenSSH

  • sshd pentru serverul de ssh, cand vreti sa configurati voi masina la care va conectati

  • ssh: optiuni pentru specificarea portului, debug-ul conexiunii, key forwarding, port forwarding, etc.

Ceva nu a mers bine

Google sau imi scrieti. Exista TONE de documentatie si explicatii.