Kopiranje datotek med strežniki: scp, rsync in sftp

Linux Branje: 3 min

Če do strežnika dostopaš prek SSH, lahko prek njega kopiraš tudi datoteke, po šifrirani povezavi, brez posebnega računa FTP. Izbiraš lahko med tremi orodji:

  • scp: preprosto, za enkratno kopiranje;
  • rsync: za velike količine podatkov, selitev in ponavljajočo se sinhronizacijo, ker prenese le spremembe in ga je po prekinitvi mogoče nadaljevati;
  • sftp: za interaktivno upravljanje datotek oziroma z grafičnimi programi (FileZilla, WinSCP, Cyberduck).

Vsa tri orodja uporabljajo isto uporabniško ime, geslo ali ključ SSH kot prijava SSH (glej: Kako se prek SSH povežem s svojim VPS?). V Linuxu, macOS in Windows 10/11 (PowerShell) sta ukaza scp in sftp na voljo privzeto.

scp

# Nalaganje datoteke na strežnik
scp mentes.sql janos@203.0.113.10:/home/janos/

# Prenos datoteke s strežnika v trenutni imenik
scp janos@203.0.113.10:/var/log/nginx/error.log .

# Nalaganje celotne mape
scp -r weboldal/ janos@203.0.113.10:/var/www/

# Nestandardna vrata SSH (z velikim P!)
scp -P 2255 mentes.sql janos@203.0.113.10:/home/janos/

rsync

rsync mora biti nameščen na obeh računalnikih (sudo dnf install rsync ali sudo apt install rsync).

rsync -avz --progress weboldal/ janos@203.0.113.10:/var/www/weboldal/
  • -a (archive): kopira skupaj s podimeniki in ohrani dovoljenja, lastnika in čas spremembe,
  • -v: izpiše kopirane datoteke,
  • -z: med prenosom stisne podatke (uporabno pri počasni povezavi, v hitrem omrežju ga lahko izpustiš),
  • --progress: prikazuje napredek.

Če ukaz zaženeš znova, kopira le spremenjene datoteke, zato je prekinjeno kopiranje preprosto nadaljevati.

Pazi na poševnico

Poševnica (/) na koncu vira spremeni rezultat:

  • rsync -a weboldal/ cel/ kopira vsebino mape weboldal v mapo cel;
  • rsync -a weboldal cel/ kopira samo mapo weboldal, zato bo rezultat cel/weboldal/.

V preizkusu (AlmaLinux 10.2) so bili po prvi različici v cilju a.php, cache in e.log, pri drugi pa ena sama mapa weboldal.

Druga uporabna stikala

# Poskusni zagon: izpiše, kaj bi naredil, vendar ničesar ne kopira
rsync -avn weboldal/ janos@203.0.113.10:/var/www/weboldal/

# Nestandardna vrata SSH
rsync -avz -e "ssh -p 2255" weboldal/ janos@203.0.113.10:/var/www/weboldal/

# Izpust map
rsync -avz --exclude 'cache/' --exclude '*.log' weboldal/ janos@203.0.113.10:/var/www/weboldal/

# Na cilju izbriše datoteke, ki jih v viru ni več
rsync -avz --delete weboldal/ janos@203.0.113.10:/var/www/weboldal/

Stikalo --delete vedno najprej preizkusi s stikalom -n (poskusni zagon): če napačno vtipkaš vir ali cilj, se lahko izbrišejo datoteke v cilju. Pri poskusnem zagonu rsync izpiše, kaj bi izbrisal (v preizkusu deleting regi.txt), na koncu izpisa piše (DRY RUN), datoteka pa je res ostala na mestu.

Selitev med dvema strežnikoma

Pri selitvi strežnika je najhitreje, če rsync zaženeš neposredno na novem strežniku in podatke povlečeš s starega, tako ne gredo prek tvoje internetne povezave:

# Zagnano na novem strežniku
rsync -avz --progress janos@regi.szerver.ip:/var/www/ /var/www/

Pri daljšem kopiranju ukaz zaženi v tmux ali screen, da ga prekinitev povezave ne ustavi (glej: Zaganjanje ukazov ob prekinjeni povezavi SSH).

sftp

sftp odpre interaktivno povezavo, v kateri lahko z ukazi brskaš po datotekah strežnika:

sftp janos@203.0.113.10
Ukaz Pomen
ls, cd, pwd izpis in menjava imenika na strežniku
lls, lcd, lpwd enako na lastnem računalniku
put fajl nalaganje (put -r mappa celotno mapo)
get fajl prenos (get -r mappa celotno mapo)
rm, mkdir, rename brisanje, ustvarjanje mape, preimenovanje
exit izhod

Za grafični vmesnik uporabi program, ki podpira SFTP (na primer FileZilla, WinSCP ali Cyberduck): kot protokol izberi SFTP in vnesi naslov strežnika, vrata SSH 22 (ali lastna) ter uporabniško ime in geslo ali ključ.

Prenos velike mape v enem koraku

Prenos veliko majhnih datotek (na primer strani WordPress) je hitrejši, če jih med prenosom zapakiraš v en sam arhiv:

tar -czf - weboldal/ | ssh janos@203.0.113.10 "tar -xzf - -C /var/www/"

Več o uporabi tar: Ustvarjanje in razpakiranje arhiva tar.gz.

Nazaj: Linux – članki (76)