GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sicheres Kopieren von Dateien mit dem SCP-Befehl

Der SCP-Befehl (Secure Copy) ist ein nicht interaktiver Befehl zum sicheren Kopieren von Dateien und Verzeichnissen zwischen zwei Systemen. SCP verwendet das SSH-Protokoll zur Verschlüsselung und Authentifizierung und ist damit eine sichere Möglichkeit, Dateien zwischen Remote-Servern zu übertragen.

Kein Leser? Sehen Sie sich dieses zugehörige Video-Tutorial an! Sie sehen das Video nicht? Stellen Sie sicher, dass Ihr Werbeblocker deaktiviert ist.

Wenn Sie nach einer großartigen Anleitung zur Verwendung des SCP-Befehls suchen, suchen Sie nicht weiter. Dieses Tutorial zeigt Ihnen Beispiele für die Verwendung von SCP-Befehlen, die Ihnen helfen könnten, ein überzeugter SCP-Benutzer zu werden.

Bereit? Lesen Sie weiter, um Ihre Dateiübertragungen auf die nächste Stufe zu bringen!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen.

  • Sie benötigen zwei Linux-Computer, die als Kopierquelle und Kopierziel in demselben oder unterschiedlichen Netzwerken fungieren. Dieses Tutorial verwendet Ubuntu 20.04-Computer, wie in der folgenden Tabelle aufgeführt.
Computername Bezeichnung
ubuntu1 Quellhost
ubuntu2 Zielhost
  • Wenn sich auf jedem oder zwischen den beiden Computern eine Firewall befindet, vergewissern Sie sich, dass Port 22 geöffnet ist.
  • In diesem Tutorial wird davon ausgegangen, dass Sie bereits eine SSH-Sitzung geöffnet und sich an beiden Computern angemeldet haben.

Kopieren einer Datei mit dem SCP-Befehl

Es kann viele Gründe geben, warum Sie Dateien von einem System auf ein anderes kopieren möchten. Vielleicht zu Sicherungszwecken, um Konfigurationsdateien zu replizieren oder einfach nur eine Kopie der Dateien zu haben. Was auch immer der Grund sein mag, das SCP-Kommando hält Ihnen den Rücken frei.

Die grundlegende Syntax für den SCP-Befehl lautet wie folgt.

scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2

Wo:

  • Option – Gibt alle zu verwendenden Optionen an, z. B. Chiffre oder Limit. Sie werden in diesem Tutorial einige gängige Optionen verwenden.
  • user1 – ist der Benutzername auf dem Quellhost.
  • SRC_HOST – ist der Hostname oder die IP-Adresse der Quelle der Kopie .
  • your_file1 – ist der Pfad und Name der Datei, die Sie kopieren möchten.
  • DEST_HOST – ist der Hostname oder die IP-Adresse des Ziels der Kopie .
  • user2 – ist der Benutzername mit Zugriff auf den Zielhost.
  • your_file2 – ist der Pfad und Name der Datei, die Sie von your_file1 kopieren möchten

Hinweis:Sie können Ihre Dateipfade mit einem relativen oder absoluten Pfad auf dem lokalen System angeben. Aber die Dateipfade auf dem entfernten System müssen einen Benutzernamen mit einem absoluten Pfad verwenden.

Nachdem Sie nun die grundlegende Syntax verstanden haben, können Sie mit der Übung zum Kopieren von Dateien mit dem SCP-Befehl beginnen.

1. Erstellen Sie zunächst eine neue Datei namens backup.txt im Home-Verzeichnis auf ubuntu1 .

# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash 

2. Erstellen Sie als Nächstes ein neues Verzeichnis mit dem Namen backup auf ubuntu2. Dieses Verzeichnis ist der Zielpfad für die Dateikopie.

# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd

3. Führen Sie nun den folgenden scp-Befehl auf Ubuntu1 aus, um backup.txt zu kopieren zur Sicherung Verzeichnis auf Ubuntu2. Stellen Sie sicher, dass Sie den Benutzernamen und den Pfad durch Ihren eigenen ersetzen.

scp backup.txt [email protected]:/home/ata/backup

Wenn Sie die Datei unter einen anderen Namen kopieren möchten, hängen Sie den neuen Dateinamen an den Zielpfad an. Beispiel:scp backup.txt [email protected]:/home/ata/backup/backup2.txt

4. Wenn Sie sich jetzt zum ersten Mal mit ubuntu2 verbinden geben Sie yes ein an der Bestätigungsaufforderung und drücken Sie die Eingabetaste.

5. Geben Sie als Nächstes das Passwort des Benutzerkontos auf ubuntu2 ein und drücken Sie die Eingabetaste. Sobald Sie das richtige Passwort eingegeben haben, wird die Dateikopie fortgesetzt.

6. Wechseln Sie nach dem Kopieren der Datei zu Ihrem ubuntu2 Terminal und führen Sie den folgenden Befehl aus, um den Verzeichnisinhalt aufzulisten.

ls

Bestätigen Sie, dass die Datei backup.txt existiert und Sie haben die Datei erfolgreich kopiert.

7. Zeigen Sie als Nächstes den Inhalt der kopierten Datei an, um zu bestätigen, dass die Datei auf ubuntu2 intakt ist .

cat backup.txt

8. Um schließlich zu bestätigen, dass die Dateien identisch sind, rufen Sie die SHA1-Prüfsumme jeder Datei auf beiden Computern ab und vergleichen Sie die Werte. Dieser Schritt ist eine zusätzliche Maßnahme, um sicherzustellen, dass sich die Integrität der Datei während der Übertragung nicht geändert hat.

# on ubuntu1 and ubuntu2
sha1sum backup.txt

Rekursives Kopieren mit dem SCP-Befehl ausführen

Im vorherigen Abschnitt haben Sie gelernt, einzelne Dateien mit dem SCP-Befehl von einem lokalen System auf ein Remote-System zu kopieren. In der Praxis müssen Sie oft ein ganzes Verzeichnis mit seinen Unterverzeichnissen und Dateien kopieren.

Das Kopieren ganzer Verzeichnisse gilt normalerweise für Sicherungsszenarien. Angenommen, Ihr Server (ubuntu1) betreibt einen Webserver, dessen Dateien sich in /var/www/ befinden Verzeichnis. Unten sehen Sie die beispielhafte Ordnerbaumstruktur.

/var/www
├── html
│   └── index.html
└── your_domain
    └── index.html

Mit dem SCP-Befehl können Sie mühelos den gesamten Ordner an einem entfernten Zielort sichern.

In den meisten Fällen laufen Sicherungsvorgänge über Automatisierungsskripts und geplante Aufgaben oder Cron-Jobs. Dieses Beispiel zeigt, wie Sie ein gesamtes Verzeichnis manuell sichern würden.

1. Erstellen Sie zunächst ein Webserver-Backup Verzeichnis auf ubuntu2 .

# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup

2. Wechseln Sie als Nächstes zurück zu ubuntu1 Terminal und führen Sie den folgenden SCP-Befehl aus. Der Schalter -r aktiviert den rekursiven Kopiermodus, was bedeutet, dass SCP das gesamte /var/www/ kopiert vom obersten Ordner bis zur letzten Datei.

scp -r /var/www/ [email protected]:/home/ata/web-server-backup

3. Führen Sie nun den Baumbefehl auf beiden Systemen aus, um die Verzeichnisstruktur zu vergleichen. Auf ubuntu1 , zeigen Sie den Verzeichnisbaum für /var/www an . Auf Ubuntu2 zeigen Sie den Verzeichnisbaum für das Backup-Verzeichnis an, das /home/ata/web-server-backup ist in diesem Beispiel.

# on ubuntu1
tree /var/www/

# on ubuntu2
tree /home/ata/web-server-backup

Zu kopierende Dateierweiterungen filtern

Angenommen, Sie haben ein Verzeichnis auf Ihrem lokalen System, das gemischte Dateitypen mit unterschiedlichen Erweiterungen enthält. Sie sollen alle Dateien aus diesem Ordner mit dem SCP-Befehl als Teil Ihrer Arbeit auf einen Remote-Computer kopieren. Sie wissen bereits, wie man ganze Verzeichnisse kopiert.

Voraussetzung ist aber, dass Sie nur alle Dateien mit der *.txt kopieren müssen Verlängerung. Keine Panik; Sie sind immer noch auf dem richtigen Weg, und die Lösung ist nicht weit von dem entfernt, was Sie bereits in den vorherigen Abschnitten getan haben. Um die zu kopierenden Dateien zu filtern, verwenden Sie Platzhalter.

Gebräuchliche Platzhalterzeichen sind das Sternchen (*), das null, ein oder mehrere Zeichen darstellt, und das Fragezeichen (?), das ein einzelnes Zeichen bedeutet.

1. Erstellen Sie zuerst den Beispielordner und die Dateien auf ubuntu1, die Sie später kopieren werden. Führen Sie den folgenden Befehl aus, um den Ordner foo zu erstellen und Dateien mit den Erweiterungen *.txt, *.doc und *.ppt.

# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory

2. Wechseln Sie als Nächstes zu Ihrem Ubuntu2-Terminal und erstellen Sie ein Verzeichnis namens bar . Dieses Verzeichnis wird Ihr Kopierzielpfad sein.

# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar

3. Wechseln Sie zurück zu Ihrem ubuntu1 Terminal und führen Sie den folgenden SCP-Befehl aus. Beachten Sie, dass Ihre Quelle dieses Mal anstelle eines bestimmten Ordners als Quelle einen Platzhalter enthält, der mit allen Dateien mit einem txt übereinstimmt Erweiterung innerhalb des foo Ordner.

scp *.txt [email protected]:/home/ata/bar/

Geben Sie das Kontokennwort ein, und die Kopie sollte fortgesetzt werden. Wie Sie unten sehen können, hat der SCP-Befehl nur die txt kopiert Dateien, obwohl der Quellordner andere Dateitypen enthält.

4. Wechseln Sie zuletzt zum Ubuntu2-Terminal und listen Sie die Dateien in der Leiste auf Verzeichnis.

ls -l bar/

Das Ergebnis sollte bestätigen, dass nur *.txt-Dateien im Verzeichnis vorhanden sind.

Schlüsselbasierte Authentifizierung aktivieren

Das Eingeben des Kennworts für das Zielkonto kann mühsam und umständlich sein. Außerdem ist die passwortbasierte Authentifizierung weniger sicher und für die Automatisierung nicht geeignet. Was ist die Alternative? Schlüsselbasierte Authentifizierung aktivieren.

Wie Sie wissen, verwendet der SCP-Befehl SSH im Hintergrund. Und SSH bietet Ihnen die Möglichkeit, sich mit SSH-Schlüsseln anstelle von Passwörtern zu authentifizieren. Die Schritte zum Einrichten von SCP mit SSH-Schlüsselauthentifizierung sind wie folgt.

1. Auf ubuntu1 , generieren Sie ein SSH-Schlüsselpaar, indem Sie den Befehl ssh-keygen ausführen.

ssh-keygen -t rsa

2. Drücken Sie die Eingabetaste, um den Standardpfad zum Speichern des Schlüssels zu akzeptieren. Drücken Sie abschließend zweimal die Eingabetaste, um dem Schlüssel keine Passphrase hinzuzufügen.

Wie Sie unten sehen können, hat der Befehl zwei Dateien erstellt. Die id_rsa-Datei ist Ihr privater Schlüssel, der auf dem Quellcomputer verbleibt. Umgekehrt sollten Sie die id_rsa.pub auf den Zielhost kopieren.

3. Führen Sie den folgenden Befehl aus, um Ihren öffentlichen Schlüssel auf den Remote-Host ubuntu2 zu kopieren .

ssh-copy-id [email protected]

Geben Sie das Passwort des Zielkontos an der Eingabeaufforderung ein, um mit dem Kopieren des öffentlichen Schlüssels fortzufahren.

4. Nachdem Sie das SSH-Schlüsselpaar generiert haben, führen Sie den folgenden Befehl aus, um die backup.txt sicher zu kopieren Datei von ubuntu1 zu ubuntu2 . Das Argument -i ~/.ssh/id_rsa weist den SCP-Befehl an, sich mit der SSH-Schlüsseldatei zu authentifizieren.

scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt

Der SCP-Befehl fragt nicht mehr nach dem Passwort, wie Sie unten sehen können.

Das ist es! Sie haben diese lästige Passwortabfrage abgeschafft und Ihre SSH-Sitzung noch sicherer gemacht.

Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie mit dem SCP-Befehl Dateien sicher zwischen zwei Linux-Systemen kopieren. Sie haben auch gelernt, wie Sie SCP mit SSH-Schlüsseln zur Authentifizierung verwenden. Nachdem Sie nun den SCP-Befehl kennengelernt haben, probieren Sie ihn aus, wenn Sie ihn das nächste Mal in Massendateien zwischen Computern kopieren müssen.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Kopieren und Einfügen in der Linux-Befehlszeile mit xclip

  3. 14 Beispiele für SCP-Befehle zum sicheren Übertragen von Dateien unter Linux

  4. Kopieren Sie Dateien und Verzeichnisse unter Linux

  5. Kopieren Sie Dateien mit SCP und Rsync

Cp-Befehl in Linux (Dateien kopieren)

Kopieren Sie Dateien und erstellen Sie gleichzeitig Zielverzeichnisse

So finden Sie Dateien mit dem fd-Befehl in Linux

Einfache Möglichkeit, Dateien mit dem Cat-Befehl zusammenzuführen

Linux SCP-Befehl zum sicheren Übertragen von Dateien

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl