Übertragen von Dateien von Remote zu Local mithilfe von SCP

Übertragen von Dateien von Remote zu Local mithilfe von SCP
Shell

Sicheres Kopieren von Dateien: Eine Anleitung zur Verwendung von SCP

Secure Copy Protocol (SCP) ist ein leistungsstarkes Tool zum sicheren Übertragen von Dateien und Verzeichnissen zwischen einem Remote-Server und einem lokalen Computer. Wenn Sie häufig SSH verwenden, um auf Ihren Server zuzugreifen, kann die Kenntnis der effektiven Nutzung von SCP Ihren Arbeitsablauf optimieren und sicherstellen, dass Sie wichtige Dateien schnell und sicher von Ihrem Remote-Server auf Ihr lokales System kopieren können.

In dieser Anleitung führen wir Sie durch die Schritte zum Kopieren eines Remote-Ordners mit dem Namen „foo“ in Ihr lokales Verzeichnis unter /home/user/Desktop. Ganz gleich, ob Sie Backups verwalten, Code bereitstellen oder einfach nur Dateien verschieben müssen: Wenn Sie die SCP-Befehle verstehen, werden Ihre Aufgaben einfacher und effizienter.

Befehl Beschreibung
scp -r Kopiert ganze Verzeichnisse sicher vom Remote- auf den lokalen Computer.
paramiko.SFTPClient.from_transport() Erstellt einen SFTP-Client aus einem vorhandenen SSH-Transport.
os.makedirs() Erstellt ein Verzeichnis rekursiv und stellt sicher, dass alle Verzeichnisse der mittleren Ebene erstellt werden.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Fügt den Host-Schlüssel des Servers automatisch ohne Nachfrage hinzu, nützlich für die Skripterstellung.
scp.listdir_attr() Listet die Attribute von Dateien in einem Verzeichnis auf und ermöglicht so die rekursive Kopierfunktion.
paramiko.S_ISDIR() Prüft, ob ein gegebener Pfad ein Verzeichnis ist, was beim rekursiven Kopieren hilft.
scp.get() Kopiert eine Datei vom Remote-Server auf den lokalen Computer.

Detaillierte Erläuterung der SCP-Skripte

Das erste Skriptbeispiel demonstriert die Verwendung von scp -r Befehl zum Kopieren eines Remote-Verzeichnisses auf einen lokalen Computer. Der scp command steht für Secure Copy Protocol und ist ein Befehlszeilentool, das SSH verwendet, um Dateien sicher zwischen einem Remote-Host und einem lokalen Computer zu übertragen. Der -r Das Flag im Befehl gibt an, dass die Operation rekursiv sein soll, was bedeutet, dass alle Dateien und Verzeichnisse im angegebenen Verzeichnis kopiert werden. Die Befehlsstruktur ist einfach: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Hier, user@remote_host gibt den Remote-Benutzer und -Host an und /path/to/remote/folder Und /home/user/Desktop/ sind die Quell- bzw. Zielpfade.

Das zweite Beispiel ist ein Shell-Skript, das den SCP-Prozess automatisiert. Dieses Skript definiert Variablen für den Remote-Benutzer, den Host und die Pfade und erleichtert so die Wiederverwendung und Änderung. Das Skript verwendet scp -r innerhalb eines Bash-Skripts zum Übertragen von Dateien, was in Szenarien hilfreich ist, in denen wiederholte Übertragungen erforderlich sind. Es enthält auch eine Benachrichtigung, die den Benutzer darüber informiert, wenn die Übertragung abgeschlossen ist. Das dritte Beispiel verwendet Python mit der Paramiko-Bibliothek, was besonders für komplexere oder automatisierte Arbeitsabläufe nützlich ist. Das Skript richtet einen SSH-Client ein und verwendet den paramiko.SFTPClient.from_transport() Methode zum Erstellen einer SFTP-Sitzung. Anschließend wird eine Funktion zum rekursiven Kopieren von Dateien vom Remote-Server in das lokale Verzeichnis definiert scp.listdir_attr() Und paramiko.S_ISDIR() um zwischen Dateien und Verzeichnissen zu unterscheiden. Dieser Ansatz ist von Vorteil für diejenigen, die Skripts in Python bevorzugen und Dateiübertragungsfunktionen in größere Automatisierungsskripts integrieren müssen.

Verwenden von SCP zum Übertragen von Dateien vom Remote-Server auf den lokalen Computer

Shell-Skript für 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/

Automatisieren der SCP-Übertragung mit einem Shell-Skript

Shell-Skript zur Automatisierung von 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}"

Python-Skript für die SCP-Dateiübertragung

Python-Skript mit der Paramiko-Bibliothek

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

Erweiterte SCP-Nutzung: Tipps und Tricks

Über die grundlegende Verwendung von hinaus scp Zum Kopieren von Dateien und Verzeichnissen gibt es mehrere erweiterte Techniken und Optionen, die Ihr Dateiübertragungserlebnis verbessern können. Eine nützliche Funktion ist die Möglichkeit, die während der Übertragung verwendete Bandbreite zu begrenzen, was besonders hilfreich sein kann, wenn mit begrenzten Netzwerkressourcen gearbeitet wird. Dies kann mit der erreicht werden -l Option gefolgt von der Bandbreitenbegrenzung in Kilobit pro Sekunde, zum Beispiel scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Eine weitere nützliche Option ist die -C Flag, das die Komprimierung ermöglicht und möglicherweise die Übertragung großer Dateien beschleunigt.

Sicherheit ist ein weiterer wichtiger Aspekt, der bei der Verwendung berücksichtigt werden muss scp. Während scp Obwohl SSH von Natur aus für sichere Übertragungen verwendet wird, können Sie zusätzliche Schritte unternehmen, um die Sicherheit zu erhöhen. Beispielsweise kann die Verwendung von SSH-Schlüsseln zur Authentifizierung anstelle von Passwörtern die Sicherheit und den Komfort erheblich verbessern. Darüber hinaus können Sie mithilfe von einen anderen SSH-Port angeben -P Option, wenn Ihr Server nicht den Standardport 22 verwendet. Beispiel: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ ermöglicht Ihnen die Verbindung zu einem Server, der SSH auf Port 2222 ausführt.

Häufig gestellte Fragen und Antworten zu SCP

  1. Wie kopiere ich mit SCP eine Datei von lokal auf remote?
  2. Sie können verwenden scp local_file user@remote_host:/path/to/remote/directory.
  3. Wie kann ich den Fortschritt der SCP-Übertragung überprüfen?
  4. Benutzen Sie die -v Option zum Aktivieren des ausführlichen Modus: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Kann ich Dateiattribute beibehalten, während ich SCP verwende?
  6. Ja, verwenden Sie die -p Option zum Beibehalten von Änderungszeiten, Zugriffszeiten und Modi: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Wie verwende ich SCP mit einem anderen SSH-Schlüssel?
  8. Geben Sie den SSH-Schlüssel mit an -i Möglichkeit: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Wie handhabe ich große Dateiübertragungen mit SCP?
  10. Benutzen Sie die -C Option zur Komprimierung und die -l Option zur Bandbreitenbegrenzung: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Wie übertrage ich Dateien mit SCP über einen anderen SSH-Port?
  12. Benutzen Sie die -P Option zur Angabe des Ports: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Kann SCP mit symbolischen Links umgehen?
  14. Ja das -r Die Option kopiert symbolische Links sowie Dateien und Verzeichnisse.
  15. Was passiert, wenn eine SCP-Übertragung unterbrochen wird?
  16. Führen Sie das erneut aus scp Befehl zum Fortsetzen der Übertragung; Es werden Dateien übersprungen, die bereits kopiert wurden.
  17. Wie verwende ich SCP mit einem Passwort in einem Skript?
  18. Es wird empfohlen, stattdessen SSH-Schlüssel zu verwenden, Sie können aber auch Tools wie verwenden sshpass zur Passwortauthentifizierung in Skripten.

Abschließende Gedanken zur SCP-Nutzung

Wenn Sie verstehen, wie Sie SCP zum Übertragen von Dateien und Verzeichnissen von einem Remote-Server auf einen lokalen Computer verwenden, können Sie die Effizienz Ihres Arbeitsablaufs erheblich steigern. Durch die Beherrschung sowohl grundlegender Befehle als auch fortgeschrittener Techniken können Sie sichere und effiziente Datenübertragungen gewährleisten. Ganz gleich, ob Sie einzelne Dateien oder ganze Verzeichnisse kopieren, Aufgaben mit Skripts automatisieren oder Python für komplexere Vorgänge verwenden, SCP bleibt ein vielseitiges und leistungsstarkes Tool für Ihre Datenverwaltungsanforderungen.