Bezpieczne kopiowanie plików: przewodnik po korzystaniu z SCP
Protokół Secure Copy Protocol (SCP) to potężne narzędzie do bezpiecznego przesyłania plików i katalogów pomiędzy zdalnym serwerem a maszyną lokalną. Jeśli często korzystasz z protokołu SSH w celu uzyskania dostępu do swojego serwera, wiedza o tym, jak efektywnie korzystać z protokołu SCP, może usprawnić przepływ pracy, zapewniając możliwość szybkiego i bezpiecznego kopiowania ważnych plików ze zdalnego serwera do systemu lokalnego.
W tym przewodniku przeprowadzimy Cię przez procedurę kopiowania zdalnego folderu o nazwie „foo” do lokalnego katalogu /home/user/Desktop. Niezależnie od tego, czy zarządzasz kopiami zapasowymi, wdrażasz kod, czy po prostu chcesz przenieść pliki, zrozumienie poleceń SCP sprawi, że Twoje zadania będą łatwiejsze i wydajniejsze.
| Komenda | Opis |
|---|---|
| scp -r | Bezpiecznie kopiuje całe katalogi z komputera zdalnego na lokalny. |
| paramiko.SFTPClient.from_transport() | Tworzy klienta SFTP na podstawie istniejącego transportu SSH. |
| os.makedirs() | Tworzy katalog rekurencyjnie, upewniając się, że zostały utworzone wszystkie katalogi średniego poziomu. |
| ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) | Automatycznie dodaje klucz hosta serwera bez monitowania, przydatne w przypadku tworzenia skryptów. |
| scp.listdir_attr() | Wyświetla listę atrybutów plików w katalogu, umożliwiając funkcję kopiowania rekurencyjnego. |
| paramiko.S_ISDIR() | Sprawdza, czy dana ścieżka jest katalogiem, pomagając w kopiowaniu rekurencyjnym. |
| scp.get() | Kopiuje plik ze zdalnego serwera na komputer lokalny. |
Szczegółowe wyjaśnienie skryptów SCP
Pierwszy przykład skryptu demonstruje użycie metody polecenie skopiowania katalogu zdalnego na komputer lokalny. The Command, czyli protokół Secure Copy Protocol, to narzędzie wiersza poleceń, które wykorzystuje SSH do bezpiecznego przesyłania plików między zdalnym hostem a maszyną lokalną. The flaga w poleceniu określa, że operacja powinna być rekurencyjna, co oznacza, że skopiuje wszystkie pliki i katalogi w określonym katalogu. Struktura poleceń jest prosta: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Tutaj, określa zdalnego użytkownika i hosta, oraz I są odpowiednio ścieżką źródłową i docelową.
Drugim przykładem jest skrypt powłoki, który automatyzuje proces SCP. Skrypt ten definiuje zmienne dla zdalnego użytkownika, hosta i ścieżek, co ułatwia ich ponowne użycie i modyfikację. Skrypt używa w skrypcie Bash do przesyłania plików, co pomaga w scenariuszach, w których wymagane są powtarzalne transfery. Zawiera także powiadomienie informujące użytkownika o zakończeniu przesyłania. Trzeci przykład wykorzystuje język Python z biblioteką Paramiko, co jest szczególnie przydatne w przypadku bardziej złożonych lub zautomatyzowanych przepływów pracy. Skrypt konfiguruje klienta SSH i używa pliku metoda tworzenia sesji SFTP. Następnie definiuje funkcję rekurencyjnego kopiowania plików ze zdalnego serwera do katalogu lokalnego za pomocą I paramiko.S_ISDIR() aby rozróżnić pliki i katalogi. To podejście jest korzystne dla tych, którzy wolą pisać skrypty w Pythonie i muszą zintegrować funkcję przesyłania plików z większymi skryptami automatyzującymi.
Używanie protokołu SCP do przesyłania plików z serwera zdalnego na komputer lokalny
Skrypt powłoki dla SCP
# Basic SCP command to copy a remote folder to a local directoryscp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/# Breakdown of the command:# scp: invokes the SCP program# -r: recursively copies entire directories# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder# /home/user/Desktop/: specifies the local destination directory# Example usage with real values:scp -r user@example.com:/var/www/foo /home/user/Desktop/
Automatyzacja transferu SCP za pomocą skryptu powłoki
Skrypt powłoki do automatyzacji SCP
#!/bin/bash# This script automates the SCP process# VariablesREMOTE_USER="user"REMOTE_HOST="remote_host"REMOTE_PATH="/path/to/remote/folder"LOCAL_PATH="/home/user/Desktop/"# Execute SCP commandscp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}# Notify user of completionecho "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"
Skrypt Pythona do przesyłania plików SCP
Skrypt Pythona wykorzystujący bibliotekę Paramiko
import paramikoimport os# Establish SSH clientssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect('remote_host', username='user', password='password')# SCP commandscp = paramiko.SFTPClient.from_transport(ssh.get_transport())# Define remote and local pathsremote_path = '/path/to/remote/folder'local_path = '/home/user/Desktop/'# Function to recursively copy filesdef recursive_copy(remote_path, local_path):os.makedirs(local_path, exist_ok=True)for item in scp.listdir_attr(remote_path):remote_item = remote_path + '/' + item.filenamelocal_item = os.path.join(local_path, item.filename)if paramiko.S_ISDIR(item.st_mode):recursive_copy(remote_item, local_item)else:scp.get(remote_item, local_item)# Start copy processrecursive_copy(remote_path, local_path)# Close connectionsscp.close()ssh.close()print(f"Files have been copied successfully from {remote_path} to {local_path}")
Zaawansowane wykorzystanie SCP: porady i wskazówki
Poza podstawowym użyciem w przypadku kopiowania plików i katalogów istnieje kilka zaawansowanych technik i opcji, które mogą poprawić jakość przesyłania plików. Przydatną funkcją jest możliwość ograniczenia przepustowości wykorzystywanej podczas transferu, co może być szczególnie pomocne podczas pracy z ograniczonymi zasobami sieciowymi. Można to osiągnąć za pomocą opcję, po której następuje limit przepustowości w kilobitach na sekundę, na przykład . Inną przydatną opcją jest -C flagę, która umożliwia kompresję, potencjalnie przyspieszając przesyłanie dużych plików.
Bezpieczeństwo to kolejny krytyczny aspekt, który należy wziąć pod uwagę podczas użytkowania . Chwila z natury używa SSH do bezpiecznych transferów, istnieją dodatkowe kroki, które możesz podjąć, aby zwiększyć bezpieczeństwo. Na przykład użycie kluczy SSH do uwierzytelnienia zamiast haseł może znacznie poprawić bezpieczeństwo i wygodę. Dodatkowo możesz określić inny port SSH za pomocą opcję, jeśli Twój serwer nie używa domyślnego portu 22. Na przykład scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ umożliwia połączenie z serwerem obsługującym SSH na porcie 2222.
- Jak skopiować plik z lokalnego na zdalny za pomocą SCP?
- Możesz użyć .
- Jak mogę sprawdzić postęp transferu SCP?
- Użyj opcja włączenia trybu szczegółowego: .
- Czy mogę zachować atrybuty plików podczas korzystania z SCP?
- Tak, użyj możliwość zachowania czasów modyfikacji, czasów dostępu i trybów: .
- Jak używać SCP z innym kluczem SSH?
- Określ klucz SSH za pomocą opcja: .
- Jak sobie poradzić z przesyłaniem dużych plików za pomocą SCP?
- Użyj opcja kompresji i opcja ograniczenia przepustowości: .
- Jak przesyłać pliki za pomocą SCP przez inny port SSH?
- Użyj możliwość określenia portu: .
- Czy SCP może obsługiwać dowiązania symboliczne?
- Tak opcja skopiuje dowiązania symboliczne, a także pliki i katalogi.
- Co się stanie, jeśli transfer SCP zostanie przerwany?
- Uruchom ponownie polecenie wznowienia transferu; pominie pliki, które zostały już skopiowane.
- Jak używać SCP z hasłem w skrypcie?
- Zamiast tego zaleca się używanie kluczy SSH, ale możesz użyć narzędzi takich jak do uwierzytelniania hasłem w skryptach.
Zrozumienie, jak używać protokołu SCP do przesyłania plików i katalogów ze zdalnego serwera na komputer lokalny, może znacznie zwiększyć wydajność przepływu pracy. Opanowując zarówno podstawowe polecenia, jak i zaawansowane techniki, możesz zapewnić bezpieczne i wydajne przesyłanie danych. Niezależnie od tego, czy kopiujesz pojedyncze pliki, czy całe katalogi, automatyzujesz zadania za pomocą skryptów, czy używasz języka Python do bardziej złożonych operacji, SCP pozostaje wszechstronnym i potężnym narzędziem do zarządzania danymi.