Cum să utilizați comanda scp pentru a transfera în siguranță fișiere în Linux

Să presupunem că ai nevoie să trimiți câteva fișiere între servere pe un sistem Linux. Există mai multe metode prin care poți face asta, dar dacă securitatea transferului este prioritară, ai la dispoziție câteva variante. Cea mai directă abordare este utilizarea comenzii `scp` (secure copy), care îți permite să transferi fișierele fără a te preocupa de eventuale vulnerabilități. În acest articol, vom detalia cum să folosești comanda `scp` pentru a transfera fișiere în mod securizat pe sistemul tău Linux.

Transferul de fișiere cu comanda `scp` în Linux (2023)

Ce este comanda `scp` în Linux

Când vine vorba de transferul de date într-o rețea securizată, comanda `scp` se dovedește extrem de utilă. Ea reprezintă Secure Copy Protocol și facilitează transferul de fișiere și directoare între două sisteme prin conexiuni SSH (Secure Shell). Datorită SSH, te poți baza pe securitatea datelor, deoarece acestea sunt criptate în mod implicit. Simplu spus, comanda `scp` este o versiune mai sigură a comenzii `cp`. Pentru mai multe informații despre comenzile terminalului Linux, poți consulta articolul nostru dedicat.

Cum se utilizează comanda `scp`: Sintaxă și opțiuni

Înainte de a începe transferul de fișiere prin `scp`, este esențial să înțelegem sintaxa și opțiunile comenzii:

scp <opțiune> <[email protected]_adresă_ip:cale/către/sursa/fișier> <[email protected]_adresă_ip:cale/țintă>

Explicarea sintaxei:

  • Prima parte, <[email protected]_ip_address:path/to/source/file>, indică sistemul „sursă” de unde vor fi transferate fișierele sau directoarele.
  • A doua parte, <[email protected]_ip_address:target/path>, specifică sistemul „țintă” către care se vor trimite fișierele sau directoarele.

Dacă unul dintre parametri este omis, comanda `scp` din Linux va căuta mai întâi fișierul local și apoi îl va copia. Iată câteva dintre opțiunile disponibile pentru comandă:

Opțiuni:

  • `-P`: Specifică portul la care să se conecteze la sistemul gazdă. Dacă nu este specificat, se va folosi portul 22 implicit.
  • `-p`: Păstrează timpii de modificare, de acces și modurile din fișierul original la copierea pe sistemul țintă.
  • `-r`: Copiază recursiv un director întreg pe sistemul țintă.
  • `-J`: Permite conectarea între sursă și destinație prin intermediul unui sistem proxy (gazdă intermediară).
  • `-3`: Copiază fișierele atât în sistemul țintă, cât și local.
  • `-4`: Forțează comanda `scp` să utilizeze numai adrese IPv4.
  • `-6`: Forțează comanda `scp` să utilizeze numai adrese IPv6.

Cum să copiezi fișiere folosind comanda `scp`

Înainte de a utiliza comanda `scp` în Linux, trebuie să te asiguri că următoarele cerințe sunt îndeplinite atât pe sistemul sursă, cât și pe cel țintă:

  • SSH trebuie să fie instalat.
  • Este necesar accesul root sau un utilizator cu privilegii sudo.

Copierea fișierelor de pe gazda locală către o destinație la distanță

Pentru a transfera un fișier de pe sistemul local către o destinație la distanță, folosește această sintaxă:

scp <opțiuni> <cale_către_fișierul_local> <utilizator_la_distanță>@<adresa_ip_țintă_la_distanță>:<cale_de_stocare_în_destinația_la_distanță>

Pentru a clarifica sintaxa, iată un exemplu:

scp test.txt [email protected]:/home/remote2/Documente/

În acest exemplu:

  • `test.txt` este fișierul de transferat, localizat în directorul curent al sistemului local.
  • `test` este numele de utilizator de pe sistemul țintă.
  • `139.144.11.105` este adresa IP a sistemului țintă.
  • `/home/remote2/Documents/` este locul de pe sistemul țintă unde va fi salvat fișierul.

Copierea fișierelor de pe o gazdă la distanță către o destinație locală

Pentru a transfera un fișier de pe o gazdă la distanță către mașina ta locală, folosește următoarea sintaxă a comenzii `scp` pe sistemul tău Linux:

scp <opțiuni> <utilizator_la_distanță>@<adresa_ip_gazdă_la_distanță>:<calea_fișierului_de_transferat> <calea_către_fișierul_stocat>

De exemplu, dacă trebuie să transferi un fișier numit `test.py` de pe un server la distanță, poți folosi această comandă:

scp [email protected]:/home/test/test1.py ~/test1.py

În acest exemplu:

  • `test` este numele de utilizator de pe gazda la distanță.
  • `10.10.11.113` este adresa IP a gazdei la distanță.
  • `/home/test/test1.py` este calea fișierului de transferat de pe gazda la distanță.
  • `~/test1.py` este numele fișierului după transferul pe mașina locală, stocat în directorul principal.

Transferul fișierelor de pe o gazdă la distanță către o altă destinație la distanță

Cu comanda `scp`, poți transfera fișiere nu doar între sistemul local și o mașină la distanță, ci și între două sisteme la distanță. Înainte de a transfera fișiere între două sisteme la distanță, este recomandat să generezi o cheie SSH privată și o cheie SSH publică pe sistemul sursă și să stochezi o copie a cheii publice pe sistemul destinație.

Utilizatorii întâmpină adesea eroarea „Verificarea cheii gazdă eșuată” când transferă fișiere între două sisteme la distanță. Pentru a evita această eroare, folosește o cheie SSH ca măsură suplimentară. Iată cum poți face acest lucru:

1. Generează o pereche de chei publice/private pe serverul sursă folosind această comandă:

ssh-keygen -t <algoritm_criptare>

2. Ca algoritm de criptare, poți folosi „rsa”, care este cel mai frecvent utilizat, sau orice alt algoritm preferat.

3. Apoi, vei fi întrebat unde să stochezi cheia SSH. O poți stoca în orice locație dorești sau în locația implicită.

4. Pentru fraza de acces, poți introduce orice alegere sau poți lăsa câmpul gol apăsând Enter.

5. După aceea, copiază cheia publică pe serverul de destinație folosind comanda de mai jos. Astfel, te vei putea conecta la sistemul de destinație fără parolă folosind SSH.

ssh-copy-id <nume_utilizator_destinație>@<adresa_ip_destinație>

Notă: Conexiunea fără parolă va funcționa doar pentru utilizatorul pentru care ai generat cheia SSH.

6. După ce ai creat și stocat cheia SSH pe serverul la distanță, folosește această sintaxă a comenzii `scp` pentru a transfera fișiere între două sisteme la distanță care rulează Linux:

scp <opțiuni> <utilizator_la_distanță_1>@<adresa_ip_gazdă_la_distanță>:<calea_fișierului_de_transferat> <utilizator_la_distanță_2>@<adresa_ip_țintă_la_distanță>:<calea_de_stocare_în_destinația_la_distanță>

Să presupunem că trebuie să transferi un fișier numit `test.txt` de pe o gazdă la distanță pe un alt receptor la distanță, folosește această comandă:

scp [email protected]:/home/test1/test.txt [email protected]:/home/remote2/Documents/test1.txt

În acest exemplu:

  • `remote1` este numele de utilizator de pe gazda expeditorului de la distanță
  • `10.10.11.113` este adresa IP a gazdei expeditorului de la distanță
  • `/home/test1/test.txt` este calea către fișierul de trimis
  • `remote2` este numele de utilizator de pe ținta receptorului de la distanță
  • `10.11.27.111` este adresa IP a țintei receptorului de la distanță
  • `/home/remote2/Documents/test1.txt` este numele și calea unde va fi salvat fișierul primit.

Transferul mai multor fișiere folosind comanda `scp`

Transferul mai multor fișiere unul câte unul poate fi o sarcină obositoare. În schimb, poți folosi următoarea sintaxă pentru a transfera fișiere utilizând comanda `scp` în Linux:

scp <cale_către_fișier_1> <cale_către_fișier_2> <receptor_la_distanță>@<adresa_ip_țintă_la_distanță>:<cale_de_stocare_în_destinația_la_distanță>

De exemplu – dacă trebuie să trimiți patru fișiere, inclusiv `test1.txt`, `test2.py`, `test3.sh` și `test4.c`, către un receptor de la distanță, poți folosi comanda de mai jos:

scp -P 22 test1.txt test2.py test3.sh test4.c [email protected]:/home/remote_1/Documents

Să înțelegem cum funcționează această comandă și ce face:

  • `-P 2222` este folosit pentru a specifica conectarea prin portul 22.
  • `test1.txt test2.py test3.sh test4.c` sunt numele fișierelor de transferat.
  • `remote_1` este numele de utilizator de pe sistemul receptor.
  • `10.10.11.113` este adresa IP a receptorului.
  • `/home/remote_1/Documents` indică calea unde vor fi stocate fișierele primite.

Poți folosi chiar și metacaractere pentru a trimite mai multe fișiere cu aceeași extensie, după cum urmează:

scp <metacaracter>.<extensie> <receptor_la_distanță>@<adresa_ip_țintă_la_distanță>:<calea_de_stocare_în_destinația_la_distanță>

De exemplu, dacă trebuie să trimiți toate fișierele `.py` către un server la distanță, folosește comanda `scp` de mai jos în terminalul Linux:

scp *.py [email protected]:/home/remote_1/

Aici,

  • `*.py` înseamnă toate fișierele Python.
  • `remote1` este numele de utilizator al receptorului.
  • `10.10.11.113` este adresa IP a receptorului.
  • `/home/remote_1/` este locația unde vor fi stocate fișierele primite.

Întrebări frecvente

Transferul de fișiere prin SCP este sigur?

Secure Copy Protocol (SCP) este un protocol bazat pe tehnologia SSH, care folosește criptarea și autentificarea pentru schimbul de fișiere între două gazde. Acest lucru asigură securitatea și integritatea completă a datelor între gazde.

Este SCP mai sigur decât SFTP?

Atât protocoalele SCP, cât și SFTP oferă un nivel similar de securitate. Principalul avantaj al utilizării SCP în locul SFTP este viteza mai mare de transfer, utilă în special în rețelele cu latență ridicată.

Transferă fișiere în siguranță folosind comanda `scp` în Linux

La un moment dat, fiecare utilizator are nevoie să transfere fișiere prin rețea. Comanda `scp` facilitează acest proces în mod sigur și eficient, chiar și într-o rețea cu latență ridicată. Înțelegerea diferitelor opțiuni și a sintaxei comenzii `scp` este extrem de utilă. Poți, de asemenea, să consulți ghidurile noastre despre cum să redenumești un fișier în Linux și cum să ștergi un fișier în Linux pentru a-ți îmbunătăți abilitățile de gestionare a fișierelor pe acest sistem de operare. Sperăm că acest articol te-a ajutat să înțelegi cum să folosești comanda `scp` pentru a transfera fișiere pe sistemele Linux. Dacă întâmpini dificultăți în timp ce folosești comanda, te rugăm să ne anunți în secțiunea de comentarii.