Kopiowanie folderów i plików ze zdalnego do lokalnego za pomocą SCP

Kopiowanie folderów i plików ze zdalnego do lokalnego za pomocą SCP
Shell

Przesyłanie plików za pomocą SCP: krótki przewodnik

Protokół Secure Copy Protocol (SCP) to przydatne narzędzie do przesyłania plików i katalogów pomiędzy komputerami zdalnymi i lokalnymi. Jeśli często korzystasz z protokołu SSH w celu uzyskania dostępu do swojego serwera, umiejętność wydajnego kopiowania folderów i plików jest niezbędna do zarządzania Twoimi danymi.

W tym przewodniku omówimy, jak używać SCP do kopiowania zdalnego folderu o nazwie bla do komputera lokalnego, w szczególności do /home/użytkownik/Pulpit. W tym samouczku założono podstawową wiedzę na temat poleceń SSH i terminali.

Komenda Opis
scp -r Bezpiecznie kopiuje rekursywnie katalog i jego zawartość ze zdalnego hosta na komputer lokalny.
paramiko.SSHClient() Tworzy instancję klienta SSH w Pythonie, aby ułatwić operacje SSH.
scp.get() Używa klienta SCP w Pythonie do pobierania plików lub katalogów ze zdalnego hosta do ścieżki lokalnej.
ansible.builtin.fetch Moduł Ansible do pobierania plików ze zdalnych komputerów na komputer lokalny.
flat: no Opcja w module pobierania Ansible umożliwiająca zachowanie struktury katalogów podczas kopiowania.
validate_checksum: yes Zapewnia integralność kopiowanych plików poprzez sprawdzanie ich sum kontrolnych.

Zrozumienie protokołu SCP do przesyłania plików

Dostarczony skrypt powłoki pokazuje, jak używać scp aby skopiować folder ze zdalnego serwera na komputer lokalny. Najpierw definiuje zmienne dla zdalnej nazwy użytkownika, hosta i katalogu, a także katalogu lokalnego. Następnie skrypt wykonuje scp -r polecenie, które oznacza „bezpieczną kopię” i pozwala na rekurencyjne kopiowanie katalogów. Składnia ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} określa ścieżkę źródłową, podczas gdy ${LOCAL_DIR} określa ścieżkę docelową na komputerze lokalnym. Skrypt kończy się powtórzeniem komunikatu o powodzeniu.

Skrypt Pythona osiąga ten sam cel, ale używa paramiko biblioteka do obsługi połączeń SSH i scp bibliotekę, aby wykonać bezpieczną kopię. Po zaimportowaniu niezbędnych bibliotek ustawia zmienne dla katalogów zdalnych i lokalnych. Skrypt tworzy instancję klienta SSH za pomocą paramiko.SSHClient() i łączy się ze zdalnym serwerem za pomocą connect metoda. Następnie tworzy instancję klienta SCP za pomocą SCPClient(ssh.get_transport()) i korzysta z scp.get metoda kopiowania katalogu zdalnego na komputer lokalny. Na koniec skrypt zamyka klienta SCP.

Automatyzacja przesyłania plików za pomocą Ansible

Podręcznik Ansible to kolejna metoda kopiowania plików ze zdalnego serwera na komputer lokalny. Ansible używa konfiguracji opartej na YAML do definiowania zadań. Podręcznik rozpoczyna się od nazwania zadania i określenia hostów, którymi w tym przypadku jest host lokalny. Następnie definiuje zadanie pobrania folderu zdalnego za pomocą metody ansible.builtin.fetch moduł. The src atrybut określa katalog zdalny, natomiast dest atrybut określa lokalne miejsce docelowe. The flat: no Opcja zapewnia zachowanie struktury katalogów podczas kopiowania.

The fail_on_missing: yes Opcja zapewnia, że ​​podręcznik nie powiedzie się, jeśli katalog źródłowy nie istnieje, zapewniając dodatkową warstwę obsługi błędów. Dodatkowo, validate_checksum: yes opcja weryfikuje integralność skopiowanych plików sprawdzając ich sumy kontrolne, zapewniając, że pliki zostały przesłane poprawnie i bez uszkodzeń. Takie podejście jest szczególnie przydatne do automatyzacji powtarzalnych zadań przesyłania plików w spójny i niezawodny sposób.

Używanie SCP do przesyłania plików ze zdalnego do lokalnego

Skrypt powłoki do przesyłania plików 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}"

Automatyzacja przesyłania plików SCP za pomocą Pythona

Skrypt Pythona do automatycznego przesyłania 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()

Używanie Ansible do zarządzania transferami plików SCP

Poradnik Ansible dotyczący przesyłania plików 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

Zaawansowane techniki i rozważania dotyczące SCP

Poza podstawowym przesyłaniem plików, SCP oferuje kilka zaawansowanych funkcji i opcji, które mogą być nieocenione w przypadku bardziej złożonych zadań. Jedną z takich funkcji jest możliwość używania znaków wieloznacznych do określenia wielu plików lub katalogów. Na przykład za pomocą scp user@remote_host:/path/to/files/*.txt /local/path/ skopiuje wszystkie pliki .txt z katalogu zdalnego do katalogu lokalnego. Może to zaoszczędzić czas i usprawnić przepływ pracy w przypadku dużej liczby plików.

Kolejną przydatną funkcją jest -P opcja umożliwiająca określenie numeru portu dla połączenia SCP. Jest to szczególnie przydatne, jeśli Twoja usługa SSH działa na niestandardowym porcie. Na przykład za pomocą scp -P 2222 user@remote_host:/path/to/file /local/path/ połączy się ze zdalnym hostem na porcie 2222. Dodatkowo -C Opcję można wykorzystać do kompresji danych podczas przesyłania, co może znacznie skrócić czas przesyłania dużych plików. Osiąga się to poprzez dodanie -C do polecenia SCP, na przykład in scp -C user@remote_host:/path/to/largefile /local/path/.

Często zadawane pytania dotyczące przesyłania plików SCP

  1. Jak skopiować cały katalog za pomocą SCP?
  2. Użyj polecenia scp -r user@remote_host:/path/to/remote/dir /local/path/ aby rekursywnie skopiować katalog.
  3. Czy mogę kopiować pliki z określonego portu za pomocą SCP?
  4. Tak, możesz określić port za pomocą scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. Jak mogę skopiować wiele plików za pomocą SCP?
  6. Używaj znaków wieloznacznych, takich jak scp user@remote_host:/path/to/files/*.txt /local/path/ aby skopiować wiele plików.
  7. Czy można kompresować pliki podczas transferu SCP?
  8. Tak, dodaj -C opcję polecenia SCP, na przykład scp -C user@remote_host:/path/to/file /local/path/.
  9. Jak sobie poradzić z przesyłaniem dużych plików za pomocą SCP?
  10. Użyj -C opcję kompresji plików i zapewnienia stabilnego połączenia, aby zapobiec zakłóceniom.
  11. Czy SCP można zautomatyzować za pomocą skryptów?
  12. Tak, możesz używać skryptów powłoki, skryptów Pythona lub podręczników Ansible do automatyzacji przesyłania plików SCP.
  13. Co powinienem zrobić, jeśli transfer SCP się nie powiedzie?
  14. Sprawdź łączność sieciową, upewnij się, że ścieżka i uprawnienia są prawidłowe oraz zweryfikuj konfigurację SSH.
  15. Czy SCP może wznowić przerwany transfer?
  16. Nie, SCP nie obsługuje wznawiania transferów. Rozważ użycie rsync do wznawianych transferów.
  17. Jak mogę zapewnić integralność plików podczas transferu SCP?
  18. Użyj validate_checksum opcję w Ansible lub ręcznie zweryfikuj sumy kontrolne po transferze.

Końcowe przemyślenia na temat transferów SCP:

Opanowanie wykorzystania SCP do przesyłania plików pomiędzy zdalnymi i lokalnymi maszynami jest niezbędną umiejętnością do wydajnego zarządzania serwerem. Wykorzystując skrypty powłoki, skrypty Pythona i podręczniki Ansible, możesz zautomatyzować i uprościć te zadania, oszczędzając czas i redukując błędy. Zaawansowane opcje, takie jak kopiowanie rekursywne, specyfikacja portów i kompresja danych, dodatkowo zwiększają wszechstronność SCP. Niezależnie od tego, czy chodzi o codzienne operacje, czy o migrację danych na dużą skalę, zrozumienie tych technik zapewnia bezpieczne i niezawodne przesyłanie plików.