Przesyłanie plików ze zdalnego do lokalnego za pomocą protokołu SCP

Przesyłanie plików ze zdalnego do lokalnego za pomocą protokołu SCP
Shell

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 scp -r polecenie skopiowania katalogu zdalnego na komputer lokalny. The scp 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 -r 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, user@remote_host określa zdalnego użytkownika i hosta, oraz /path/to/remote/folder I /home/user/Desktop/ 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 scp -r 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 paramiko.SFTPClient.from_transport() metoda tworzenia sesji SFTP. Następnie definiuje funkcję rekurencyjnego kopiowania plików ze zdalnego serwera do katalogu lokalnego za pomocą scp.listdir_attr() 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 directory
scp -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

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "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 paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def 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.filename
        local_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 process
recursive_copy(remote_path, local_path)

# Close connections
scp.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 scp 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ą -l opcję, po której następuje limit przepustowości w kilobitach na sekundę, na przykład scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. 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 scp. Chwila scp 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ą -P 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.

Często zadawane pytania i odpowiedzi na temat SCP

  1. Jak skopiować plik z lokalnego na zdalny za pomocą SCP?
  2. Możesz użyć scp local_file user@remote_host:/path/to/remote/directory.
  3. Jak mogę sprawdzić postęp transferu SCP?
  4. Użyj -v opcja włączenia trybu szczegółowego: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Czy mogę zachować atrybuty plików podczas korzystania z SCP?
  6. Tak, użyj -p możliwość zachowania czasów modyfikacji, czasów dostępu i trybów: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Jak używać SCP z innym kluczem SSH?
  8. Określ klucz SSH za pomocą -i opcja: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Jak sobie poradzić z przesyłaniem dużych plików za pomocą SCP?
  10. Użyj -C opcja kompresji i -l opcja ograniczenia przepustowości: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Jak przesyłać pliki za pomocą SCP przez inny port SSH?
  12. Użyj -P możliwość określenia portu: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Czy SCP może obsługiwać dowiązania symboliczne?
  14. Tak -r opcja skopiuje dowiązania symboliczne, a także pliki i katalogi.
  15. Co się stanie, jeśli transfer SCP zostanie przerwany?
  16. Uruchom ponownie scp polecenie wznowienia transferu; pominie pliki, które zostały już skopiowane.
  17. Jak używać SCP z hasłem w skrypcie?
  18. Zamiast tego zaleca się używanie kluczy SSH, ale możesz użyć narzędzi takich jak sshpass do uwierzytelniania hasłem w skryptach.

Końcowe przemyślenia na temat wykorzystania SCP

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.