Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:laborator-07 [2017/09/27 12:09]
alexandru.jercaianu
uso:laboratoare:laborator-07 [2022/11/15 22:09] (current)
liza_elena.babu
Line 1: Line 1:
-====== Laborator 07 -  ​Servicii ​de rețea ​ ​======+====== Laborator 07 - Automatizarea în linia de comandă ​ ​======
  
-===== Suport ​laborator ​=====+{{page>​uso:​laboratoare:​laborator-07:​concepts&​nofooter&​noeditbutoon}} 
 +{{page>​uso:​laboratoare:​laborator-07:​basics&​nofooter&​noeditbutoon}} 
 +{{page>​uso:​laboratoare:​laborator-07:​exercises&​nofooter&​noeditbutoon}}
  
-  * [[http://​books.google.ro/​books?​id=_JFGzyRxQGcC&​lpg=PP1&​hl=ro&​pg=PA249#​v=onepage&​q&​f=false|9. Servicii de rețea]] 
  
-===== Resurse laborator =====+==== Cuprins ​====
  
-  * [[http://​repository.grid.pub.ro/​cs/​uso/​2015-2016/​lab07/​puccini-lab7.ova|Mașina virtuală ''​puccini''​]] +{{page>​uso:​laboratoare:​laborator-07:nav&noheader&​nofooter&​noeditbutton}}
- +
-<note> +
-Pentru rezolvarea exercițiilor aveți nevoie de mașina virtuală **''​puccini''​**. +
- +
-În sala EG306, mașina virtuală se află pe pe partiția de 10 GB. +
- +
-În sala EG106, imaginea de mașină virtuală se află la ''/​mnt/​unfrozen/​uso/​mv/​puccini-lab7.ova''​. +
- +
-Credențialele de autentificare în cadrul mașinii virtuale sunt: +
-  * nume de utilizator: ''​student''​ +
-  * parola: ''​student''​ +
-</​note>​ +
- +
-<note warning>​ +
-Verificați existența lor pe mașina de lucru. Dacă nu există, chemați asistentul sau descărcați-o chiar voi pe parcursul demo-ului.  +
-</​note>​ +
- +
- +
-====== Demo ====== +
- +
-<note tip>​Stațiile în Internet se pot identifica după **adresă IP** sau după **nume de domeniu** (rezolvabil la o adresă IP prin DNS). Despre aceasta vom afla mai multe în laboratorul următor. Până atunci, acestea sunt pentru noi doar niște identificatori ai stațiilor.  +
-</​note>​ +
- +
- +
-===== 1. Conexiune la distanță ===== +
- +
-=== Telnet === +
- +
-//Telnet// (TELetype NETwork) este un serviciu de tip client-server. In mod implicit nu există nicio diferență între resursele disponibile unui utilizator ce rulează un interpretor local și unul ce rulează prin telnet. Pentru a iniția o conexiune folosim comanda ''​telnet''​. Trebuie să specificăm adresa stației unde dorim să ne conectăm și pe această stație trebuie să ruleze un server de telnet. +
- +
-La mașina virtuală ''​puccini''​ ne conectăm folosind IP-ul ''​192.168.56.101''​. Pe ea rulează un server de telnet +
- +
-<code bash> +
-student@uso:​~$ telnet 192.168.56.101 +
-Trying 192.168.56.101... +
-Connected to 192.168.56.101. +
-Escape character is '​^]'​. +
- +
-Ubuntu 14.04.1 LTS +
- +
-puccini login: student +
-Password:  +
-Last login: Sun Aug  2 13:45:53 EEST 2015 from 192.168.56.1 on pts/1 +
-Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic i686) +
- +
- * Documentation: ​ https://​help.ubuntu.com/​ +
-student@puccini:​~$  +
-student@puccini:​~$  +
-student@puccini:​~$ pwd +
-/​home/​student +
-</​code>​ +
- +
-<note warning>​ +
-Telnet nu criptează datele! Asta înseamnă că toate parolele transmise prin telenet sunt transmise //în clar//, și toată comunicația poate fi foarte ușor interceptată. Din această cauză utilizarea telnet-ului este descurajată.  +
-</​note>​ +
- +
-=== SSH === +
- +
-//SSH// (Secure Shell) este un serviciu de acces la distață securizat. Funcționează similar cu telnet dar, spre deosebire de acesta, toată comunicația este criptată. Din această cauză este serviciul pe care îl veți folosi cel mai des atunci când va trebui să lucrați pe o stație la distanță. Comanda pentru a iniția o conexiune este ''​ssh''​. Ea primeste un argument de forma ''​user@host'',​ unde ''​user''​ este numele utilizatorului drept care dorim să ne autentificăm și ''​host''​ este adresa stației pe care dorim să ne autentificăm. +
- +
-<​code>​ +
-student@uso:​~$ ssh student@192.168.56.101 +
-student@192.168.56.101'​s password:  +
-Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic i686) +
- +
- * Documentation: ​ https://​help.ubuntu.com/​ +
-Last login: Sun Aug  2 14:01:44 2015 from 192.168.56.1 +
-student@puccini:​~$  +
-student@puccini:​~$  +
-student@puccini:​~$ pwd +
-/​home/​student +
-student@puccini:​~$  +
-</​code>​ +
- +
-=== Netcat === +
- +
-Deși nu este un serviciu de conexiune la distanță vom începe cu //netcat//. Acest serviciu permite crearea de conexiuni între două mașini. Prin aceste conexiuni pot apoi circula date, aceste date fiind o conversație,​ rezultatul unei comenzi sau conținutul unui fișier. Pentru a folosi netcat pentru a crea o conexiune între două mașini vom rula comanda ''​nc''​ **pe ambele mașini**. Serviciul este unul de tip client-server deci una dintre mașini va avea rolul de client (va transmite date) iar cealaltă de server (va asculta după conexiuni și date noi).  +
- +
-Pentru a porni netcat în modul de transmisie vom rula o comandă de tipul ''​nc 192.168.0.1 1234'',​ unde ''​192.168.0.1''​ este adresa IP a mașini căreia dorim să îi transmitem date, iar ''​1234''​ este portul pe care să transmită (poate fi orice număr dar unele porturi sunt deja folosite, și nu pot fi folosite și de netcat). Comanda va prelua date la intrarea standard si le va transmite destinației pe portul specificat până când întâlnește simbolul ''​EOF''​ (end-of-file,​ poate fi generat prin combinația de taste ''​CTRL+d''​). +
- +
-<note tip> +
-Rețineți, cum am învățat in [[uso:​laboratoare:​laborator-06|laboratorul 6]], că puteți să redirectați intrarea comenzii să provină dintr-un fișier (folosind operatorul ''<''​) sau rezultatul altei comenzi (printr-un pipe, ''​|''​). +
-</​note>​ +
- +
-Pentru a porni netcat în modul de ascultare vom rula o comandă de tipul ''​nc -l 1234'',​ unde argumentul ''​-l''​ specifică pornirea în starea de ascultare iar ''​1234''​ este portul pe care să asculte. Comanda va asculta pe portul respectiv până la întâlnirea simbolului ''​EOF''​. +
- +
-<note warning>​ +
-Pentru a funcționa comunicarea între doua mașini trebuie să rulăm netcat cu același port pe ambele mașini. +
-</​note>​ +
- +
-Să vedem un exemplu de comunicație între mașina gazdă (calculatorul din EG306/​EG106) și mașina virtuală ''​puccini''​.  +
- +
-Pe ''​puccini''​ vom porni un server de ''​netcat''​: +
- +
-<code bash> +
-student@puccini:​~$ netcat -l 4444 +
- +
-</​code>​ +
- +
-Deși nu pare că face nimic, ''​puccini''​ ascultă pe portul ''​4444''​ după mesaje. Să îi trimitem unul: +
- +
-<code bash> +
-student@eg306:​~$ nc 192.168.56.101 4444 +
-tosca +
- +
-[CTRL+d] +
-</​code>​ +
- +
-Mergem din nou pe terminalul deschis din ''​puccini''​ și observăm că am primit ''​tosca''​. Puteam face și direct trimiterea, folosind pipe-uri: +
- +
-<code bash> +
-student@eg306:​~$ echo "​tosca"​ | nc 192.168.56.101 4444 +
-</​code>​ +
- +
-Prin ''​netcat''​ putem transfera conținutul unor fișiere text tot folosind pipe-uri:  +
- +
-<code bash> +
-student@puccini:​~$ netcat -l 4444 +
- +
-</​code>​ +
- +
-<code bash> +
-student@eg306:​~$ cat song.txt  +
-nessun dorma +
-student@eg306:​~$ cat song.txt | nc 192.168.56.101 4444 +
- +
-</​code>​ +
- +
-<code bash> +
-student@puccini:​~$ netcat -l 4444 +
-nessun dorma +
-</​code>​ +
- +
-===== 2. Transfer de fișiere ===== +
- +
-Până acum am folosit servicii de rețea pentru a transforma informații sub formă de mesaje, comenzi sau rezultatul acestora. Putem să le folosim și pentru a transfera fișiere. Probabil cel mai cunoscut dintre aceste servicii este //​BitTorrent//​ (există și ''​transmission-cli''​ pentru download torrente în linia de comandă).  +
- +
-=== Utilitarul wget === +
- +
-Acest utilitar ofera suport pentru a descărca pagini și fișiere folosind două protocoale foarte comune, HTTP (HyperText Transfer Protocol) și FTP (File Transfer Protocol). Comanda pentru a-l folosi este ''​wget'',​ căreia îi vom transmite ca argument URL-ul (Universal Resource Locator) resursei pe care dorim să o descărcăm. +
- +
-<​code>​ +
-student@uso:​~$ wget http://​ocw.cs.pub.ro/​courses//​res/​sigla_uso.png +
-[...] +
-100%[=============================>​] 44.091 ​     --.-K/​s ​  in 0,08s    +
- +
-2014-11-18 01:29:52 (524 KB/s) - ‘sigla_uso.png’ saved [44091/​44091] +
- +
-student@uso:​~$ wget ftp://​swarm.cs.pub.ro/​exec.zip +
-[...] +
- +
-100%[=============================>​] 13.961.705 ​  ​636KB/​s ​  in 21s     +
- +
-2014-11-18 01:32:33 (635 KB/s) - ‘exec.zip’ saved [13961705] +
-</​code>​ +
- +
-Descărcarea are loc în mod neinteractiv ceea ce face ca acest utilitar să poată fi folosit eficient în script-uri. +
- +
-=== Utilitarul scp === +
- +
-SCP (Secure CoPy) este un utilitar ce permite transferul de fișiere între stațiile din rețea. El folosește ssh pentru a transfera datele deoarece acesta oferă deja suport pentru autentificare și criptare. Pentru a putea fi folosit pe stația remote trebuie să ruleze un server ssh. +
- +
-Comanda pentru a folosi acest utilitar este ''​scp''​. Sintaxa este asemănătoare comenzii ''​cp'':​ ''​scp sursă destinație''​. Diferența este că oricare sau ambele dintre ''​sursă''​ și ''​destinație''​ pot referi fișiere sau directoare ce se află pe o altă stație decât cea pe care introducem comanda. În cazul în care vrem să referim un fișier de pe o altă statie trebuie să prefixăm calea către acel fișier cu ''​user@host:'',​ unde, la fel ca în cazul lui ''​ssh'',​ ''​user''​ este numele utilizatorului drept care dorim să ne autentificăm și ''​host''​ este adresa IP a stației pe care dorim să ne autentificăm. +
- +
-<note tip> +
-Atenție la ''​**user@host:​**''​ versus ​ ''​**user@host**''​ (fără 2 puncte la final). Dacă folosim ca destinație a doua nu se va face nici un transfer remote, ci va fi creat un fișier cu numele ​ ''​user@host''​. +
-</​note>​ +
- +
-Exemple:  +
-  * Copierea unui fișier local către o destinație remote +
-<​code>​ +
-student@uso:​~$ scp ~/foo.txt student@192.168.56.101:​~/​ +
-student@192.168.0.114'​s password:  +
-foo.txt ​                                      ​100% ​   0     ​0.0KB/​s ​  ​00:​00 ​    +
-</​code>​ +
-  * Copierea unui fișier de pe o stație remote pe stația locală +
-<​code>​ +
-student@uso:​~$ scp student@192.168.56.101:​~/​bar.txt . +
-student@192.168.0.114'​s password:  +
-bar.txt ​                                      ​100% ​   0     ​0.0KB/​s ​  ​00:​00 ​    +
-</​code>​ +
- +
-====== Exerciții ====== +
- +
-<note important>​ +
-La fiecare exercițiu citiți cu atenție care parte a exercițiului trebuie rezolvată **pe sistemul fizic** și care trebuie rezolvată **pe mașina virtuală**. +
- +
-**Sistemul fizic** se referă la sistemul fizic din sala de laborator (rulând Ubuntu GNOME 16.04), în vreme ce **mașina virtuală** se referă la mașina virtuală ''​puccini''​ pornită prin VirtualBox. +
-</​note>​ +
- +
-<​hidden>​ +
-Puneți accentul pe a citi enunțul ca să nu se apuce să rezolve exercițiile pe mașina greșită. +
-</​hidden>​ +
- +
-==== 0. Pregătire setup (1p) ==== +
- +
-<note important>​ +
-De rezolvarea acestui exercițiu depind toate celelalte. Chemați asistentul de fiecare dată când întâmpinați probleme majore. +
-</​note>​ +
- +
-Deschideți VirtualBox și importați fișierul ''​puccini-lab7.ova''​. +
- +
-<note tip> +
-Pentru a deschide mașina virtuală urmați pașii: +
-  * Porniți ''​virtualbox''​. Fie folosiți ''​Alt+F2''​ și tastați ''​virtualbox''​. Fie porniți virtualbox de pe Desktop. Fie folosiți comanda ''​virtualbox''​ în linia de comandă. +
-  * Folosiți opțiunea ''​%%File -> Import Appliance%%''​ pentru a ajunge la interfața de import. +
-  * În interfața de import navigați în root filesystem în calea unde menținută imagina de mașină virtuală. +
-</​note>​ +
- +
-<note important>​ +
-**Atenție**:​ când importați mașina în VirtualBox, să bifați opțiunea **//​Reinitialize the MAC address of all network cards//​**! +
-</​note>​ +
- +
-Avem nevoie de o [[https://​www.virtualbox.org/​manual/​ch06.html#​network_hostonly|interfață host-only]]. E posibil ca atunci când importâm mașina virtuală să primim eroarea ''​Invalid settings detected''​. Soluția este că trebuie să adăugăm o interfață virtuală de rețea care să conecteze sistemul fizic de mașina virtuală. Aceasta se face astfel:  +
- +
-Din VirtualBox mergem la ''​File''​ --> ''​Preferences''​ --> ''​Network''​. Mergem la tab-ul ''​Host-only Networks''​ și apăsăm butonul de add. Urmăriți detalii în poza de mai jos:  +
- +
-{{http://​ocw.cs.pub.ro/​courses/​_media/​uso/​laboratoare/​3dxym.png?​direct&500|}} +
- +
-Observați că s-a adăugat o nouă interfață ''​vboxnet0''​.  +
- +
-==== 1. Conectarea la fep.grid.pub.ro (1p) ==== +
- +
-Vrem să ne conectăm la un sistem la distanță; alegem sistemul ''​fep.grid.pub.ro''​. +
- +
-Conectați-vă **de pe sistemul fizic** prin SSH la stația ''​fep.grid.pub.ro''​. Numele utilizatorului pe care trebuie să îl folosiți este numele utilizator vostru pe ''​cs.curs.pub.ro''​. Spre exemplu, dacă numele utilizatorul de pe ''​cs.curs.pub.ro''​ ar fi ''​ion.popescu''​ atunci comanda ar fi ''​ssh ion.popescu@fep.grid.pub.ro''​. +
- +
-<note warning>​ +
-Anunțați asistentul în cazul în care aveți probleme cu autentificarea. Acest pas va fi necesar în cadrul examenului de mid-term și final. +
-</​note>​ +
- +
-<​note>​ +
-În cazul unei conectări reușite prompt-ul se va schimba într-un prompt de forma:<​code>​ +
-[ion.ionescu@fep-62-1 ~] +
-</​code>​ +
-</​note>​ +
- +
-<​note>​ +
-După ce v-ați conectat pe sistemul ''​fep.grid.pub.ro''​ deconectați-vă folosind comanda ''​exit''​ sau combinația de taste ''​Ctrl+d''​. +
- +
-După rularea comenzii promtp-ul va reveni la valoarea cunoscută, specifică mașinii fizice, adică va avea forma:<​code>​ +
-student@asgard:​~$ +
-</​code>​ +
-</​note>​ +
- +
-==== 2. Acces prin SSH la mașina virtuală (2p) ==== +
- +
-<note important>​Exercițiul se desfășoară folosind mașina virtuală ''​**puccini**''</​note>​ +
- +
-<note warning>​Înainte de a începe rezolvarea acestui exercitiu, rulați în mașina virtuală următoarea comandă: +
- +
-''​student@puccini:​~$ echo 127.0.0.1 puccini | sudo tee -a /​etc/​hosts''​ +
-</​note>​ +
- +
-Pentru a lucra mai ușor, dorim să ne conectăm prin SSH la mașina virtuală. +
- +
-Pentru început, faceți configurările necesare **pe mașina virtuală** astfel încât sa că puteți conecta prin SSH **de pe sistemul fizic**. +
- +
-<note tip> +
-Rețineți că pentru a putea să vă conectați prin SSH la o mașină pe aceasta trebuie să ruleze un server de SSH.  +
- +
-Pentru a verifica dacă serviciul SSH rulează folosi comanda +
-<​code>​ +
-sudo service ssh status +
-</​code>​ +
-Pentru a opri, porni și reporni seriviciul de SSH folosiți comenzile +
-<​code>​ +
-sudo service ssh stop +
-sudo service ssh start +
-sudo service ssh restart +
-</​code>​ +
- +
-În mod generic, folosiți comenzi de forma +
-<​code>​ +
-sudo service <​service-name>​ status +
-sudo service <​service-name>​ stop +
-sudo service <​service-name>​ start +
-sudo service <​service-name>​ restart +
-</​code>​ +
-pentru a afla informații despre, sau pentru a opri, porni sau reporni serviciul identificat de ''<​service-name>''​. Exemple sunt ''​ssh'',​ ''​postfix'',​ ''​apache2'',​ ''​cron''​ și altele, depinzând ce servicii sunt instalate și configurate pe sistemul vostru. +
-</​note>​ +
- +
-Acum, cu serverul SSH pornit pe mașina virtuală, conectați-vă la mașina virtuală. +
- +
-<note tip> +
-Pentru a afla adresa IP a mașinii virtuale unde trebuie să faceți SSH folosiți, în interfața VirtualBox a mașinii virtuale, comanda: +
- +
-<​code>​ +
-ip address show dev eth1 +
-</​code>​ +
-</​note>​ +
- +
-Dacă a reușit conectarea prin SSH prompt-ul va fi schimbat într-un prompt de forma<​code>​ +
-student@puccini:​~$ +
-</​code>​ +
- +
-După ce vă conectați prin SSH la mașina virtuală deconectați-vă folosind comanda ''​exit''​ sau combinația de taste ''​Ctrl+d''​. +
- +
-<​solution>​ +
-Soluție: +
-  * pe mașina virtuală: ''​sudo service ssh start''​ +
-  * pe sistemul fizic: ''​ssh student@IP'',​ unde IP este adresa IP a mașinii virtuale +
-</​solution>​ +
- +
-==== 3. Autentificare prin SSH fără parolă. Chei publice/​private (1.5p) ==== +
- +
-=== 3.1. Generarea unei perechi de chei SSH (0.75p) === +
- +
-Acum că avem acces prin SSH la mașina virtuală, dorim să nu mai trebuiască să ne introducem parola atunci când deschidem o noua conexiune. Pentru aceasta va trebui să stabilim o autentificare bazată pe chei. Primul pas este să generăm o pereche de chei SSH **pe sistemul fizic**. +
- +
-<note tip> +
-Căutați o comandă care să genereze chei pentru autentificare. Pentru a o găsi trebuie să căutați printre paginile de manual, folosind comanda ''​apropos''​ (vedeți [[uso:​laboratoare:​laborator-02|laboratorul 2]]). Pentru a găsi comanda dorită folosiți comanda<​code>​ +
-apropos ssh +
-</​code>​ +
- +
-Comanda pe care o căutați sigur are legătura cu ''​authentication''​ și ''​key''​ *wink*. Dacă ați găsit comanda, când o apelați nu trebuie să specificați niciun parametru. +
-</​note>​ +
- +
-<note tip> +
-La rularea comenzii, furnizați valorile implicite. Adică apăsați ENTER pentru fiecare informație pe care v-o cere. +
-</​note>​ +
- +
-Pentru a verifica generarea cu succes de chei, folosiți comanda de mai jos. Ar trebui să obțineți un output similar:<​code>​ +
-student@asgard:​~$ ls ~/.ssh/ +
-id_rsa id_rsa.pub +
-</​code>​ +
- +
-<​solution>​ +
-Solutie: +
-  * pe sistemul fizic: ''​ssh-keygen -t rsa''​ +
-</​solution>​ +
- +
-=== 3.2. Copierea remote a cheii (0.75p) === +
- +
-Am reușit să generăm o pereche de chei pentru autentificare prin SSH. Această pereche este formată dintr-o cheie publică și una privată. Pentru a ne putea autentifica fără a mai introduce parola trebuie să ne instalăm cheia publică **de pe sistemul fizic**. +
- +
-Ne propunem să copiem cheia publică SSH de pe sistemul fizic **pe mașina virtuală**. +
- +
-<note tip> +
-Deși există mai multe variante de a realiza acest sarcină, cea mai simplă este să folosim comanda ''​ssh-copy-id''​. Comanda ''​ssh-copy-id''​ copiază cheia la distanță, pe sistemul pe care vreți să vă autentificați. +
- +
-Sintaxa ei este asemănătoare cu cea a comenzii ''​ssh'',​ adică este urmată de o construcție de forma ''<​username>​@<​IP>'',​ unde ''<​username>''​ este numele utilizatorului iar ''<​IP>''​ este adresa IP a sitemului de la distanță. +
- +
-În cazul de față veți folosi comanda ''​ssh-copy-id''​ **pe sistemul fizic** pentru a copia cheia la distanță, pe mașina virtuală, folosind o comandă de foma<​code>​ +
-ssh-copy-id student@<​IP-VM>​ +
-</​code>​ +
-unde ''<​IP-VM>''​ este adresa IP a mașinii virtuale. +
-</​note>​ +
- +
-<note warning>​ +
-Există riscul unor erori la conectarea prin SSH. Ca să nu aveți aceste erori, să rulați, pe **sistemul fizic** comanda:<​code>​ +
-ssh-add +
-</​code>​ +
-</​note>​ +
- +
-După ce ați copiat cheia, conectați-vă la mașina virtuală folosind o comandă de forma ''​ssh student@<​IP-VM>'',​ unde ''<​IP-VM>''​ este adresa IP a mașinii virtuale. Dacă ați configurat cum trebuie, ar trebui să vă conectați la mașina virtuală fără parolă. +
- +
-<​note>​ +
-Dacă ați dat cheii alt nume decât cel implicit, trebuie să specificați calea către cheie folosind parametrul ''​-i''​. De exemplu, ''​ssh -i private_key student@172.16.14.133''​. +
-</​note>​ +
- +
-<​solution>​ +
-Soluție:  +
-  * pe sistemul fizic: ''​ssh-copy-id student@<​IP-VM>'',​ asta dacă nu cumva au schimbat numele fișierului unde era salvată cheia, în care caz trebuie ''​ssh-copy-id -i KEY student@<​IP-VM>''​ +
-</​solution>​ +
- +
-==== 4. Determinarea adresei IP publice (1.5p) ==== +
- +
-Pe sistemul fizic, folosind utilitarul ''​curl''​ și site-uri precum http://​checkip.dyndns.org sau http://​ipecho.net/​plain sau http://​icanhazip.com/,​ determinați,​ folosind linia de comandă, adresa voastră IP publică.  +
- +
-<note important>​ +
-**Atenție!** Trebuie să afișați doar adresa IP, nimic altceva pe lângă. Nu aveți nevoie de filtre de text avansate (''​cut'',​ ''​sed'',​ ''​awk''​ etc.). +
-</​note>​ +
- +
-<note tip> +
-Urmăriți și indicațiile de [[http://​askubuntu.com/​questions/​95910/​command-for-determining-my-public-ip|aici]]. +
-</​note>​ +
- +
- +
-==== 5. Descărcarea automată a unui fișier (1p) ==== +
- +
-**[0.5p]** Creați un script care descarcă fișierul [[http://​upload.wikimedia.org/​wikipedia/​commons/​a/​af/​Tux.png|acesta]],​ însă doar dacă el nu există deja în directorul curent. +
- +
-<​hidden>​ +
-Dacă găsesc o soluție mai elegantă, cum ar fi să folosească ''​find'',​ sau ''​ls &>/​dev/​null''​ puteți să le dați bonus 1 karma WoUSO. +
-</​hidden>​ +
- +
-<note tip> +
-Acest script trebuie să execute doi pași: +
-  - Să verifice existența fișierului +
-  - Să descarce fișierul +
- +
-O comandă ce returnează un cod de eroare în cazul în care fișierul trimis ca parametru nu există este comanda ''​ls''​ iar pentru a executa o comandă doar dacă cea precedentă s-a terminat cu eșec înlănțuim cele două comenzi prin operatorul ''​||''​.  +
-</​note>​ +
- +
-<​solution>​ +
-Soluție: +
-<​code>​ +
-#​!/​bin/​bash +
- +
-ls ./Tux.png || wget http://​upload.wikimedia.org/​wikipedia/​commons/​a/​af/​Tux.png +
-</​code>​ +
- +
-</​solution>​ +
- +
-**[0.5p]** Extindeți script-ul creat la exercițiul anterior astfel încât la fiecare rulare a scriptului fișierul respectiv să fie copiat în directorul ''​home''​ al utilizatorului ''​student''​ de pe mașina virtuală. +
- +
-<note tip> +
-Pentru a copia fișiere între cele două mașini puteți folosi comanda ''​scp''​. +
-</​note>​ +
- +
-<note tip> +
-Trebuie să oferiți permisiuni de execuție scriptului pe care îl creați folosind comanda<​code>​ +
-chmod a+x <​nume-script>​ +
-</​code>​ +
-unde ''<​nume-script>''​ este numele scriptului pe care l-ați creat. +
-</​note>​ +
- +
-<​solution>​ +
-Soluție: +
-<​code>​ +
-#​!/​bin/​bash +
- +
-ls ./Tux.png || wget http://​upload.wikimedia.org/​wikipedia/​commons/​a/​af/​Tux.png +
- +
-scp Tux.png student@IP:​~/​ +
-</​code>​ +
-</​solution>​ +
- +
-==== 6. Descărcarea automată a unui fișier prin autentificare (1p) ==== +
- +
-Ne propunem să descărcăm [[http://​repository.grid.pub.ro/​cs/​uso/​USO-Mint-VM.ova.torrent|acest fișier]] din linie de comandă. Din păcate dacă dăm direct ''​wget''​ vom observa următoarea eroare: +
- +
-<code bash> +
-student@uso:​~$ wget http://​repository.grid.pub.ro/​cs/​uso/​USO-Mint-VM.ova.torrent +
---2015-08-02 14:​42:​20-- ​ http://​repository.grid.pub.ro/​cs/​uso/​USO-Mint-VM.ova.torrent +
-Resolving repository.grid.pub.ro (repository.grid.pub.ro)... 141.85.241.53 +
-Connecting to repository.grid.pub.ro (repository.grid.pub.ro)|141.85.241.53|:​80... connected. +
-HTTP request sent, awaiting response... 401 Authorization Required +
- +
-Username/​Password Authentication Failed. +
-</​code>​ +
- +
-Găsiți o modalitate prin care putem descărca fișierul autentificându-ne folosind credențialele de pe ''​cs.curs.pub.ro''​. Nu dați parola în linie de comandă. Hint ''​man wget, ask-password''​ sau căutați pe Google după ''​wget secure password''​.  +
- +
-<​solution>​ +
-<code bash> +
-mihai@blackhole:​ ~ $ wget http://​repository.grid.pub.ro/​cs/​uso/​USO-Mint-VM.ova.torrent --user=mihai.barbulescu --ask-password +
-Password for user ‘mihai.barbulescu’:​  +
-(...) +
-</​code>​ +
- +
-</​solution>​ +
- +
- +
-==== 7. Torrents download from command line [1p] ==== +
- +
-<​note>​ +
-Pentru acest exercițiu avem nevoie de pachetul ''​rtorrent''​. Îl putem instala folosind comanda +
-<code bash> +
-student@midgard:​~$ sudo apt-get install rtorrent +
-</​code>​ +
-</​note>​ +
- +
-Folosiți ''​rtorrent''​ în linie de comandă pentru a descărca mașina virtuală pentru quest-ul final WoUSO din 2014, [[http://​wouso.rosedu.org/​final-quest/​v8/​|de aici]]. Este vorba de fișierul numit ''​WoUSOv8-Final-Quest.ova.torrent''​. Descărcați fișierul ''​WoUSOv8-Final-Quest.ova.torrent''​ în ''/​home/​student/​Downloads/'',​ __**folosind ''​wget''​**__. +
- +
-<note tip> +
-Pentru a descărca fișierul ''​.torrent''​ folosind ''​wget''​ urmați pașii: +
-  - Accesați [[http://​wouso.rosedu.org/​final-quest/​v8/​|link-ul]] din browser. +
-  - În fereastra nou dechisă în browser, dați click dreapta pe link-ul aferent fișierului ''​WoUSOv8-Final-Quest.ova.torrent''​. +
-  - Folosiți din meniul contextual (apărut la click dreapta) opțiunea ''​Copy link location''​ (sau similar pentru browserul vostru). +
-  - Deschideți un terminal. +
-  - Schimbați directorul în ''/​home/​student/​Downloads/'',​ +
-  - Tastați comanda ''​wget''​ și un caracter spațiu. +
-  - Folosiți combinația de taste ''​Shift+Insert''​ pentru a face paste la link-ul copiat (link-ul către fișierul ''​.torrent''​). +
-  - Rulați comanda, care va copia astfel, fișierul în directorul curent. +
- +
-</​note>​ +
- +
-<note important>​ +
-Este vorba de **alt** fișier ''​.torrent''​ decât cel folosit la exercițiul anterior: [[:​uso:​laboratoare:​laborator-07#​descarcarea_automata_a_unui_fisier_prin_autentificare_1p|6. Descărcarea automată a unui fișier prin autentificare (1p)]]. +
-</​note>​ +
- +
-Apoi folosiți ''​rtorrent''​ pentru a descărca conținutul torrent-ului indicat de fișierul ''​WoUSOv8-Final-Quest.ova.torrent''​. +
- +
-<​solution>​ +
-<code bash> +
-student@midgard:​~$ wget http://​elf.cs.pub.ro/​uso/​res/​teme/​USO-Mint-VM.ova.torrent +
-student@midgard:​~$ rtorrent ~/​Downloads/​USO-Mint-VM.ova.torrent +
-</​code>​ +
-</​solution>​ +
- +
-==== [BONUS 1] Netcat web server (2 karma WoUSO) ==== +
- +
-<note important>​Exercițiul se desfășoară pe mașina virtuală ''​**puccini**''</​note>​ +
- +
-Deschideți un editor text și creați fișierul ''​**index.html**''​ având următorul conținut:  +
- +
-<​code>​ +
-HTTP/1.1 200 OK +
-Date: Fri, 31 Dec 1999 23:59:59 GMT +
-Content-Type:​ text/html +
-Content-Length:​ 258 +
- +
- +
-<​html>​ +
-        <​head>​ +
-                <​title>​USO Rulz</​title>​ +
-        </​head>​ +
-        <​body>​ +
-                <​h1>​Yep,​ USO Rulz</​h1>​ +
-                <​h2>​Subheading problems?</​h2>​ +
-                <​p>​Sample paragraph text. It works!</​p>​ +
-        </​body>​ +
-</​html>​ +
-</​code>​ +
- +
-Pe mașina virtuală ''​**puccini**''​ porniți un server web folosind ''​netcat''​ pe portul 8888 astfel încât deschizând un browser la adresa ''​http://​192.168.56.101:​8888''​ să vedem rezultatul HTML-ului de mai sus.  +
- +
-Pentru încă **1 karma point** îmbunătățiți serverul astfel încât să servească permanent (''​netcat''​ listener-ul să nu fie închis după ce a deschis cineva pagina în browser).  +
- +
-<note tip> +
-Dacă doriți să copiați conținutul fișierului într-un fișier ''​index.html'',​ cel mai bine folosiți ca editor ''​gedit''​. +
-</​note>​ +
- +
-<​solution>​ +
-Pe mașina virtuală puccini, după ce e creat fișierul se rulează comanda: +
- +
-<code bash> +
-student@puccini:​~$ netcat -l 8888 < index.html  +
-</​code>​ +
- +
-Se observă după ce deschidem într-un browser observăm în terminal: +
- +
-<code bash> +
-student@puccini:​~$ netcat -l 8888 < index.html  +
-GET / HTTP/1.1 +
-Host: 192.168.56.101:​8888 +
-Connection: keep-alive +
-Accept: text/​html,​application/​xhtml+xml,​application/​xml;​q=0.9,​image/​webp,​*/​*;​q=0.8 +
-User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/​537.36 (KHTML, like Gecko) Chrome/​39.0.2171.95 Safari/​537.36 +
-DNT: 1 +
-Accept-Encoding:​ gzip, deflate, sdch +
-Accept-Language:​ en-US,​en;​q=0.8,​ro;​q=0.6,​fr;​q=0.4 +
-</​code>​ +
-</​solution>​+
  
uso/laboratoare/laborator-07.txt · Last modified: 2022/11/15 22:09 by liza_elena.babu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0