Kopiere mapper og filer fra ekstern til lokal ved hjelp av SCP

Kopiere mapper og filer fra ekstern til lokal ved hjelp av SCP
Shell

Overføre filer med SCP: En hurtigveiledning

Secure Copy Protocol (SCP) er et hendig verktøy for å overføre filer og kataloger mellom eksterne og lokale maskiner. Hvis du ofte bruker SSH for å få tilgang til serveren din, er det viktig å vite hvordan du kopierer mapper og filer effektivt for å administrere dataene dine.

I denne veiledningen vil vi utforske hvordan du bruker SCP til å kopiere den navngitte eksterne mappen foo til din lokale maskin, spesielt til /home/bruker/Desktop. Denne opplæringen forutsetter en grunnleggende forståelse av SSH og terminalkommandoer.

Kommando Beskrivelse
scp -r Kopierer sikkert en katalog og dens innhold fra en ekstern vert til en lokal maskin rekursivt.
paramiko.SSHClient() Oppretter en SSH-klientforekomst i Python for å lette SSH-operasjoner.
scp.get() Bruker SCP-klienten i Python til å hente filer eller kataloger fra en ekstern vert til en lokal bane.
ansible.builtin.fetch Ansible modul for å hente filer fra eksterne maskiner til den lokale maskinen.
flat: no Alternativ i Ansible hente-modulen for å opprettholde katalogstrukturen mens du kopierer.
validate_checksum: yes Sikrer integriteten til kopierte filer ved å validere kontrollsummene deres.

Forstå SCP for filoverføringer

Skallskriptet som følger med demonstrerer hvordan du bruker scp for å kopiere en mappe fra en ekstern server til en lokal maskin. Først definerer den variabler for det eksterne brukernavnet, verten og katalogen, så vel som den lokale katalogen. Skriptet kjører deretter scp -r kommando, som står for "sikker kopi" og tillater rekursiv kopiering av kataloger. Syntaksen ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} spesifiserer kildebanen, mens ${LOCAL_DIR} angir destinasjonsbanen på den lokale maskinen. Manuset avsluttes med et ekko av en suksessmelding.

Python-skriptet oppnår det samme målet, men bruker paramiko bibliotek for å håndtere SSH-tilkoblinger og scp biblioteket for å utføre den sikre kopien. Etter å ha importert de nødvendige bibliotekene, setter den variabler for de eksterne og lokale katalogene. Skriptet oppretter en SSH-klientforekomst ved hjelp av paramiko.SSHClient() og kobler til den eksterne serveren med connect metode. Den oppretter deretter en SCP-klientforekomst med SCPClient(ssh.get_transport()) og bruker scp.get metode for å kopiere den eksterne katalogen til den lokale maskinen. Til slutt lukker skriptet SCP-klienten.

Automatisering av filoverføringer med Ansible

Ansible-spilleboken er en annen metode for å kopiere filer fra en ekstern server til en lokal maskin. Ansible bruker en YAML-basert konfigurasjon for å definere oppgaver. Spilleboken starter med å navngi oppgaven og spesifisere vertene, som i dette tilfellet er lokalvert. Den definerer deretter en oppgave for å hente en ekstern mappe ved hjelp av ansible.builtin.fetch modul. De src attributt spesifiserer den eksterne katalogen, mens dest attributt angir den lokale destinasjonen. De 1. 3 alternativet sikrer at katalogstrukturen opprettholdes under kopieringen.

De fail_on_missing: yes alternativet sikrer at spilleboken mislykkes hvis kildekatalogen ikke eksisterer, noe som gir et ekstra lag med feilhåndtering. I tillegg har validate_checksum: yes alternativet verifiserer integriteten til de kopierte filene ved å sjekke sjekksummene deres, for å sikre at filene er overført riktig og uten korrupsjon. Denne tilnærmingen er spesielt nyttig for å automatisere repeterende filoverføringsoppgaver på en konsistent og pålitelig måte.

Bruke SCP for å overføre filer fra ekstern til lokal

Shell-skript for SCP-filoverføring

# 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}"

Automatisering av SCP-filoverføringer med Python

Python-skript for automatisert SCP-overføring

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()

Bruke Ansible til å administrere SCP-filoverføringer

Ansible Playbook for SCP-filoverføring

--- 
- 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

Avanserte SCP-teknikker og vurderinger

Utover grunnleggende filoverføringer tilbyr SCP flere avanserte funksjoner og alternativer som kan være uvurderlige for mer komplekse oppgaver. En slik funksjon er muligheten til å bruke jokertegn for å spesifisere flere filer eller kataloger. For eksempel å bruke scp user@remote_host:/path/to/files/*.txt /local/path/ kopierer alle .txt-filer fra den eksterne katalogen til den lokale katalogen. Dette kan spare tid og strømlinjeforme arbeidsflyter når du håndterer mange filer.

En annen nyttig funksjon er -P alternativet, som lar deg spesifisere et portnummer for SCP-tilkoblingen. Dette er spesielt nyttig hvis SSH-tjenesten din kjører på en ikke-standard port. For eksempel ved å bruke scp -P 2222 user@remote_host:/path/to/file /local/path/ vil koble til den eksterne verten på port 2222. I tillegg kan -C alternativet kan brukes til å komprimere data under overføring, noe som kan redusere overføringstiden betydelig for store filer. Dette oppnås ved å legge til -C til SCP-kommandoen, for eksempel i scp -C user@remote_host:/path/to/largefile /local/path/.

Vanlige spørsmål om SCP-filoverføringer

  1. Hvordan kopierer jeg en hel katalog med SCP?
  2. Bruk kommandoen scp -r user@remote_host:/path/to/remote/dir /local/path/ å kopiere en katalog rekursivt.
  3. Kan jeg kopiere filer fra en bestemt port ved å bruke SCP?
  4. Ja, du kan spesifisere porten med scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. Hvordan kan jeg kopiere flere filer ved hjelp av SCP?
  6. Bruk jokertegn som scp user@remote_host:/path/to/files/*.txt /local/path/ for å kopiere flere filer.
  7. Er det mulig å komprimere filer under SCP-overføring?
  8. Ja, legg til -C alternativet til SCP-kommandoen din, for eksempel scp -C user@remote_host:/path/to/file /local/path/.
  9. Hvordan håndterer jeg store filoverføringer med SCP?
  10. Bruke -C mulighet for å komprimere filer, og sikre en stabil tilkobling for å forhindre avbrudd.
  11. Kan SCP automatiseres med skript?
  12. Ja, du kan bruke skallskript, Python-skript eller Ansible-spillebøker for å automatisere SCP-filoverføringer.
  13. Hva bør jeg gjøre hvis en SCP-overføring mislykkes?
  14. Sjekk nettverkstilkoblingen, sørg for riktig bane og tillatelser, og bekreft SSH-konfigurasjonen.
  15. Kan SCP gjenoppta en avbrutt overføring?
  16. Nei, SCP støtter ikke gjenopptagelse av overføringer. Vurder å bruke rsync for gjenopptasbare overføringer.
  17. Hvordan kan jeg sikre filintegritet under SCP-overføring?
  18. Bruke validate_checksum alternativet i Ansible eller verifiser sjekksummer manuelt etter overføring.

Siste tanker om SCP-overføringer:

Å mestre bruken av SCP for filoverføringer mellom eksterne og lokale maskiner er en essensiell ferdighet for effektiv serveradministrasjon. Ved å bruke skallskript, Python-skript og Ansible-spillebøker, kan du automatisere og forenkle disse oppgavene, spare tid og redusere feil. Avanserte alternativer som rekursiv kopiering, portspesifikasjoner og datakomprimering forbedrer SCPs allsidighet ytterligere. Enten for daglig drift eller storskala datamigrasjoner, sikrer forståelse av disse teknikkene sikre og pålitelige filoverføringer.