Kopiranje map in datotek z oddaljenega na lokalni z uporabo SCP

Kopiranje map in datotek z oddaljenega na lokalni z uporabo SCP
Shell

Prenos datotek s SCP: Hitri vodnik

Protokol varnega kopiranja (SCP) je priročno orodje za prenos datotek in imenikov med oddaljenimi in lokalnimi napravami. Če za dostop do svojega strežnika pogosto uporabljate SSH, je znanje o tem, kako učinkovito kopirati mape in datoteke, bistveno za upravljanje vaših podatkov.

V tem priročniku bomo raziskali, kako uporabiti SCP za kopiranje oddaljene mape z imenom foo na vaš lokalni stroj, natančneje na /domov/uporabnik/namizje. Ta vadnica predvideva osnovno razumevanje SSH in terminalskih ukazov.

Ukaz Opis
scp -r Varno rekurzivno kopira imenik in njegovo vsebino z oddaljenega gostitelja na lokalni stroj.
paramiko.SSHClient() Ustvari primerek odjemalca SSH v Pythonu za olajšanje operacij SSH.
scp.get() Uporablja odjemalca SCP v Pythonu za pridobivanje datotek ali imenikov z oddaljenega gostitelja na lokalno pot.
ansible.builtin.fetch Ansible modul za pridobivanje datotek z oddaljenih računalnikov na lokalni stroj.
flat: no Možnost v modulu pridobivanja Ansible za ohranjanje strukture imenika med kopiranjem.
validate_checksum: yes Zagotavlja celovitost kopiranih datotek s preverjanjem njihovih kontrolnih vsot.

Razumevanje SCP za prenose datotek

Priloženi lupinski skript prikazuje uporabo scp za kopiranje mape z oddaljenega strežnika na lokalni računalnik. Najprej definira spremenljivke za oddaljeno uporabniško ime, gostitelja in imenik ter lokalni imenik. Skript nato izvede scp -r ukaz, ki pomeni "varna kopija" in omogoča rekurzivno kopiranje imenikov. Sintaksa ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} določa izvorno pot, medtem ko ${LOCAL_DIR} določa ciljno pot na lokalnem računalniku. Skript se zaključi z odmevom sporočila o uspehu.

Skript Python doseže isti cilj, vendar uporablja paramiko knjižnico za upravljanje povezav SSH in scp knjižnico za izvedbo varne kopije. Po uvozu potrebnih knjižnic nastavi spremenljivke za oddaljene in lokalne imenike. Skript ustvari primerek odjemalca SSH z uporabo paramiko.SSHClient() in se poveže z oddaljenim strežnikom z connect metoda. Nato ustvari primerek odjemalca SCP z SCPClient(ssh.get_transport()) in uporablja scp.get način za kopiranje oddaljenega imenika v lokalni računalnik. Na koncu skript zapre odjemalca SCP.

Avtomatizacija prenosov datotek z Ansible

Ansible playbook je še ena metoda za kopiranje datotek z oddaljenega strežnika na lokalni računalnik. Ansible za definiranje nalog uporablja konfiguracijo, ki temelji na YAML. Priročnik se začne s poimenovanjem naloge in določitvijo gostiteljev, ki so v tem primeru lokalni gostitelji. Nato definira nalogo za pridobivanje oddaljene mape z uporabo ansible.builtin.fetch modul. The src atribut določa oddaljeni imenik, medtem ko atribut dest atribut določa lokalni cilj. The flat: no možnost zagotavlja, da se struktura imenika ohrani med kopiranjem.

The fail_on_missing: yes zagotavlja, da priročnik ne bo uspel, če izvorni imenik ne obstaja, kar zagotavlja dodatno plast obravnave napak. Poleg tega je validate_checksum: yes možnost preveri celovitost kopiranih datotek tako, da preveri njihove kontrolne vsote in tako zagotovi, da so bile datoteke prenesene pravilno in brez poškodb. Ta pristop je še posebej uporaben za avtomatizacijo ponavljajočih se nalog prenosa datotek na dosleden in zanesljiv način.

Uporaba SCP za prenos datotek z oddaljenega na lokalni

Skript lupine za prenos datotek SCP

# Copying a remote folder to local directory using SCP
#!/bin/bash
# Define variables
REMOTE_USER="your_username"
REMOTE_HOST="your_server_address"
REMOTE_DIR="/path/to/remote/folder"
LOCAL_DIR="/home/user/Desktop"
# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} ${LOCAL_DIR}
echo "Folder copied successfully to ${LOCAL_DIR}"

Avtomatizacija prenosov datotek SCP s Pythonom

Skript Python za avtomatiziran prenos SCP

import paramiko
from scp import SCPClient
# Define variables
remote_user = "your_username"
remote_host = "your_server_address"
remote_dir = "/path/to/remote/folder"
local_dir = "/home/user/Desktop"
# Create SSH client and connect
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(remote_host, username=remote_user)
# Create SCP client and transfer files
scp = SCPClient(ssh.get_transport())
scp.get(remote_dir, local_dir, recursive=True)
scp.close()

Uporaba Ansible za upravljanje prenosov datotek SCP

Ansible Playbook za prenos datotek SCP

--- 
- name: Copy folder from remote to local
  hosts: localhost
  tasks:
    - name: Copy remote folder to local directory
      ansible.builtin.fetch:
        src: "/path/to/remote/folder"
        dest: "/home/user/Desktop"
        flat: no
        fail_on_missing: yes
        validate_checksum: yes

Napredne SCP tehnike in premisleki

Poleg osnovnih prenosov datotek SCP ponuja več naprednih funkcij in možnosti, ki so lahko neprecenljive za zahtevnejše naloge. Ena taka funkcija je možnost uporabe nadomestnih znakov za določanje več datotek ali imenikov. Na primer, z uporabo scp user@remote_host:/path/to/files/*.txt /local/path/ kopira vse datoteke .txt iz oddaljenega imenika v lokalni imenik. To lahko prihrani čas in poenostavi potek dela pri delu s številnimi datotekami.

Druga uporabna funkcija je -P možnost, ki vam omogoča, da določite številko vrat za povezavo SCP. To je še posebej priročno, če vaša storitev SSH deluje na nestandardnih vratih. Na primer z uporabo scp -P 2222 user@remote_host:/path/to/file /local/path/ se bo povezal z oddaljenim gostiteljem na vratih 2222. Poleg tega se bo -C možnost lahko uporabite za stiskanje podatkov med prenosom, kar lahko znatno skrajša čas prenosa velikih datotek. To dosežemo z dodajanjem -C na ukaz SCP, kot je in scp -C user@remote_host:/path/to/largefile /local/path/.

Pogosta vprašanja o prenosih datotek SCP

  1. Kako kopiram celoten imenik z uporabo SCP?
  2. Uporabite ukaz scp -r user@remote_host:/path/to/remote/dir /local/path/ za rekurzivno kopiranje imenika.
  3. Ali lahko kopiram datoteke iz določenih vrat z uporabo SCP?
  4. Da, vrata lahko določite z scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. Kako lahko kopiram več datotek s pomočjo SCP?
  6. Uporabite nadomestne znake, kot je scp user@remote_host:/path/to/files/*.txt /local/path/ za kopiranje več datotek.
  7. Ali je mogoče stisniti datoteke med prenosom SCP?
  8. Da, dodajte -C možnost vašega ukaza SCP, kot npr scp -C user@remote_host:/path/to/file /local/path/.
  9. Kako upravljam velike prenose datotek s SCP?
  10. Uporabi -C možnost stiskanja datotek in zagotavljanje stabilne povezave za preprečevanje prekinitev.
  11. Ali je SCP mogoče avtomatizirati s skripti?
  12. Da, za avtomatizacijo prenosov datotek SCP lahko uporabite lupinske skripte, skripte Python ali priročnike Ansible.
  13. Kaj naj storim, če prenos SCP ne uspe?
  14. Preverite omrežno povezljivost, zagotovite pravilno pot in dovoljenja ter preverite konfiguracijo SSH.
  15. Ali lahko SCP nadaljuje prekinjen prenos?
  16. Ne, SCP ne podpira nadaljevanja prenosov. Razmislite o uporabi rsync za ponovne prenose.
  17. Kako lahko zagotovim celovitost datoteke med prenosom SCP?
  18. Uporabi validate_checksum možnost v Ansible ali ročno preverite kontrolne vsote po prenosu.

Končne misli o prenosih SCP:

Obvladovanje uporabe SCP za prenos datotek med oddaljenimi in lokalnimi stroji je bistvena veščina za učinkovito upravljanje strežnika. Z uporabo lupinskih skriptov, skriptov Python in knjig Ansible lahko te naloge avtomatizirate in poenostavite, s čimer prihranite čas in zmanjšate število napak. Napredne možnosti, kot so rekurzivno kopiranje, specifikacija vrat in stiskanje podatkov, dodatno povečajo vsestranskost SCP. Ne glede na to, ali gre za vsakodnevne operacije ali obsežne selitve podatkov, razumevanje teh tehnik zagotavlja varne in zanesljive prenose datotek.