This shows you the differences between two versions of the page.
rl:labs:08:contents:02 [2020/12/01 10:10] iulia.florea [2. [10p] Problemă la conectarea SSH folosind chei] |
rl:labs:08:contents:02 [2023/11/05 12:54] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 2. [10p] Generare cheie publică și autentificare === | + | ==== 02. [10p] Format de pachete la translatare ==== |
- | În contul utilizatorului ''corina'' de pe stația ''blue'' generați o pereche cheie publică/cheie privată SSH prin rularea comenzii<code bash> | + | Ne propunem să analizăm antetul IP al pachetelor ce sunt generate de stațiile ''red'', ''green'' și ''blue'' și au ca destinație o rețea din Internet. Pentru acest lucru vom folosi utilitarul de captură ''tcpdump''. |
- | corina@blue:~$ ssh-keygen -t rsa | + | |
- | Generating public/private rsa key pair. | + | Pe stația ''red'' pornim comanda ''ping'' către ''8.8.8.8.'':<code bash> |
- | Enter file in which to save the key (/home/corina/.ssh/id_rsa): | + | root@red:~# ping 8.8.8.8 |
- | Created directory '/home/corina/.ssh'. | + | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. |
- | Enter passphrase (empty for no passphrase): | + | 64 bytes from 8.8.8.8: icmp_req=1 ttl=127 time=42.0 ms |
- | Enter same passphrase again: | + | |
- | Your identification has been saved in /home/corina/.ssh/id_rsa. | + | |
- | Your public key has been saved in /home/corina/.ssh/id_rsa.pub. | + | |
[...] | [...] | ||
- | </code> Folosiți ''ENTER'' pentru a folosi căile implicite. Nu folosiți passphrase (adică apăsați ''ENTER'' când vi se solicită passphrase-ul). Cheile sunt generate respectiv, în fișierele, ''.ssh/id_rsa'' (cheia privată) și ''.ssh/id_rsa.pub'' (cheia publică). | + | </code> |
- | Realizați operațiile necesare pentru a permite autentificarea pe bază de chei din contul utilizatorului ''corina'' de pe stația ''blue'' în contul utilizatorului ''student'' de pe stația ''host''. După aceea, verificați faptul că autentificarea se face pe baza de chei. | + | <note> |
+ | Atunci când rulăm comanda ''tcpdump'' secvența de urmat este: | ||
+ | - Se rulează comanda ''tcpdump'' cu opțiunile aferente într-un terminal, activând astfel captura de pachete. Utilitarul ''tcpdump'' așteaptă acum transmiterea de pachete pe interfețele pe care ascultă. | ||
+ | - Într-un alt terminal se rulează o comandă specifică unui client de rețea care generează trafic. | ||
+ | - Se revine în terminalul în care rulează comanda ''tcpdump'' și se urmăresc pachetele capturate. | ||
+ | - Când nu mai este nevoie de utilitarul ''tcpdump'' se întrerupe captura de pachete folosind combinația de taste ''Ctrl+c''. | ||
+ | </note> | ||
- | Aceștia sunt pașii pe care îi veți urma pentru a configura conectare SSH pe bază de chei: | + | Pentru a urmări traficul, pe stația ''host'' rulăm comanda<code bash> |
- | - generare pereche de chei SSH (folosind comanda ''ssh-keygen'') | + | root@host:~# tcpdump -n -i eth0 ip dst host 8.8.8.8 |
- | - copiere cheie publică în contul de la distanță (folosind comanda ''ssh-copy-id'') | + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode |
- | - conectare la distanță (folosind comanda ''ssh'') | + | listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes |
+ | 12:59:20.976707 IP host > 8.8.8.8: ICMP echo request, id 625, seq 6, length 64 | ||
+ | 12:59:21.977708 IP host > 8.8.8.8: ICMP echo request, id 625, seq 7, length 64 | ||
+ | </code> | ||
- | <hidden> | + | <spoiler (click pentru expandare) Detalii rulare masina virtuala VMware local> |
- | <solution> | + | <note important> |
- | <code bash> | + | După rularea comenzii de mai sus, probabil vi se va bloca terminalul. În mașina virtuală VMware apare o mini-fereastră care vă indică intrarea plăcii de rețea în modul //promiscuous//. Apăsați pe butonul ''OK'' al ferestrei pentru a debloca mașina virtuală și, astfel, terminalul. |
- | corina@blue:~$ ssh-copy-id student@host | + | </note> |
- | student@host's password: | + | </spoiler> |
- | Now try logging into the machine, with "ssh 'student@host'", and check in: | + | |
- | ~/.ssh/authorized_keys | + | Observăm că adresa IP sursă este ''host.local'' chiar dacă stația ''red'' este cea care execută comanda ''ping'' și generează pachetele de tip ''ICMP echo request''. |
- | to make sure we haven't added extra keys that you weren't expecting. | + | Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă ''tcpdump'' pe interfața ''veth-red'' în loc de ''eth0'': <code bash> |
- | + | root@host:~# tcpdump -n -i veth-red ip dst host 8.8.8.8 | |
- | corina@blue:~$ ssh -l student host | + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode |
- | [...] | + | listening on veth-red, link-type EN10MB (Ethernet), capture size 65535 bytes |
- | student@host:~$ | + | 13:01:12.557692 IP red > 8.8.8.8: ICMP echo request, id 626, seq 6, length 64 |
+ | 13:01:13.559726 IP red > 8.8.8.8: ICMP echo request, id 626, seq 7, length 64 | ||
+ | </code> | ||
+ | Observăm că pe interfața ''veth-red'' adresa IP sursă este adresa stației ''red'', adică așa cum este generat de la început pachetul. Motivul este reprezentat de faptul că pachetele ce intră pe intefața ''veth-red'' sunt capturate înainte de rutare, iar procesul NAT este aplicat **după rutare** (vezi [[rl:labs:09:contents:01|]]. | ||
+ | Pentru a vedea modul în care se translatează traficul capturăm traficul pe toate interfețele (cele de interes sunt ''veth-red'' și ''eth0'')<code bash> | ||
+ | root@host:~# tcpdump -n -i any ip dst host 8.8.8.8 | ||
+ | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | ||
+ | listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes | ||
+ | 10:23:07.632412 IP red > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 | ||
+ | 10:23:07.632430 IP host > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 | ||
+ | 10:23:08.633936 IP red > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 | ||
+ | 10:23:08.633954 IP host > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 | ||
</code> | </code> | ||
- | </solution> | + | |
- | </hidden> | + | În lista de mai sus observăm atât pachetele care sunt captuarate pe interfața ''veth-red'' (generate de stația ''red'') cât și cele capturate pe interfața ''eth0'' (translatate de stația ''host''). |
+ | |||
+ | Capturați și pachetele de reply, care au ca **sursă** adresa ''8.8.8.8''. Folosiți șirul de argumente ''ip src host 8.8.8.8'' pentru ''tcpdump''. | ||
+ | |||
+ | Repetați testele de mai sus pentru stația ''green''. | ||
+ | |||
+ | <note> | ||
+ | Întrucât latența DNS poate fi semnificativă, recomandăm folosirea opțiunii ''-n'' a utilitarului ''tcpdump'', opțiune care dezactivează rezolvarea DNS. În exemplele de mai sus, nu am folosit opțiunea ''-n'' a utilitarului ''tcpdump'' pentru a identifica mai ușor numele stațiilor implicate în conversație. | ||
+ | </note> |