Wie man Dateien sicher unter Linux mit SCP überträgt
Beim Übertragen von Dateien auf einen entfernten Linux-Server haben Sie verschiedene Optionen. Eine der besten Möglichkeiten ist die Verwendung eines Programms namens Secure Copy oder SCP, das über das SSH-Protokoll läuft, um Dateien schnell über Ihr Netzwerk auf ein entferntes System zu übertragen. Dieses Tutorial zeigt Ihnen, wie Sie Dateien sicher unter Linux mit SCP übertragen.
Inhaltsverzeichnis
- SSH konfigurieren
- Verbinden mit Ihrem System über SSH
- SCP zum Übertragen von Dateien verwenden
- Komprimierung der Dateiübertragung in SCP
- Optimierung einer Datenübertragung mit SCP
- Begrenzung der Bandbreitennutzung in SCP
- Remote zu Remote Übertragung mit SCP
- Verwendung eines Proxys mit SCP
- Ändern des Standardports in SCP
- Verwenden des SCP-Stummmodus
- Häufig gestellte Fragen
SSH konfigurieren
Auf Ihrem entfernten Server müssen Sie einen SSH-Server installieren. Der gebräuchlichste unter Linux ist der OpenSSH-Server. Um ihn zu installieren, führen Sie einen der folgenden Befehle aus:
# Debian/Ubuntu-basierten Server
sudo apt install ssh
# Fedora
sudo dnf install openssh
Je nach Ihrer Distribution müssen Sie möglicherweise SSH durch einige Software-Firewalls zulassen. Bei Ubuntu besteht dieses Problem nicht, aber bei Fedora müssen Sie auch die folgenden Befehle ausführen:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
Verbinden mit Ihrem System über SSH
Bevor Sie sich über SSH verbinden können, müssen Sie die IP-Adresse des entfernten Servers herausfinden. Auf grafischen Servern wird die IP-Adresse im Netzwerk-Applet in den Systemeinstellungen angezeigt. Auf den meisten Servern sollten Sie den Befehl ip im Terminal verwenden.
ip addr
Suchen Sie in der Ausgabe nach der Zeile, die mit inet unter ethX oder enpXsy beginnt, je nachdem, wie Ihre Netzwerkschnittstelle mit dem System verbunden ist. In meinem Fall ist es 192.168.68.108.
Um die SSH-Verbindung zu testen, wechseln Sie zu einem anderen Linux-Rechner und geben Sie ein:
Ändern Sie “user” in den tatsächlichen Benutzernamen auf dem Server.
Geben Sie das Passwort dieses Kontos ein, und Sie sind im Geschäft. Wenn Sie eine Frage zur „Authentizität des Hosts, die nicht festgestellt werden kann“ erhalten, antworten Sie einfach mit „ja“. Dies ist eine Sicherheitsüberprüfung, die sicherstellt, dass Sie sich mit Ihrem tatsächlichen Server und nicht mit einem Hochstapler verbinden. Sie sollten dieselbe Eingabeaufforderung auf Ihrem Clientsystem sehen, die Sie sehen, wenn Sie sich direkt auf dem Server anmelden, was bedeutet, dass Ihre Verbindung erfolgreich war. Sie sollten auch Ihre SSH-Verbindungen für maximale Sicherheit konfigurieren oder sogar eine Zwei-Faktor-Authentifizierung einrichten, bevor Sie mit dem nächsten Schritt fortfahren.
SCP zum Übertragen von Dateien verwenden
Jetzt, da Sie die SSH-Verbindung getestet haben, beginnen Sie, Dateien zwischen den beiden Maschinen zu kopieren. Sichere Kopien werden mit dem Befehl scp erreicht. Das Grundformat des scp-Befehls lautet:
scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION Um beispielsweise die Datei „backup.tar.gz“ von der lokalen Maschine in den Ordner „backups“ im Home-Verzeichnis des Benutzers „ramces“ auf dem entfernten Server mit der IP-Adresse 192.168.68.165 zu kopieren, verwenden Sie:
scp backup.tar.gz [email protected]:~/backups/
Ähnlich wie bei der Verbindung über ssh werden Sie nach dem Passwort gefragt. Nach dem Benutzernamen werden Sie nicht gefragt, da dieser im Befehl angegeben wurde.
Sie können auch Platzhalter wie die folgenden verwenden:
scp *.tar.gz [email protected]:~/backups/
Um eine Datei vom entfernten Server auf die lokale Maschine zu kopieren, kehren Sie einfach die Parameter um:
scp [email protected]:~/backups/backup.tar.gz ./
Achten Sie auf den Punkt am Ende des Befehls? Er bedeutet „das aktuelle Verzeichnis“, wie bei den Standardbefehlen cp oder mv. Sie könnten genauso gut ein anderes Verzeichnis angeben, wenn Sie möchten.
scp -r [email protected]:~/backups/ backups-from-server/ Und das Gleiche gilt für Platzhalter:
scp [email protected]:~/backups/*.txz ./ Um ein Verzeichnis rekursiv auf einen entfernten Server zu kopieren, verwenden Sie die Option -r:
scp -r backups/ [email protected]:~/backups/
Um eine rekursive Kopie eines Verzeichnisses vom entfernten Server auf die lokale Maschine zu kopieren, verwenden Sie:
scp -r [email protected]:~/backups/ ./
Komprimierung der Dateiübertragung in SCP
Neben dem Basis-Kopieren ist es auch möglich, das Verhalten von SCP während dieser Dateiübertragungen zu modifizieren. Zum Beispiel können Sie die -C-Flagge verwenden, um die Daten, die SCP an entfernte Clients sendet, zu komprimieren:
scp -C backup.tar.gz [email protected]:/home/ramces/ Diese Option funktioniert, indem sie jedes Datenpaket komprimiert, während es durch das SCP-Programm gesendet wird. Dies kann unglaublich nützlich sein, wenn Sie sich in einer bandbreitenbegrenzten Verbindung befinden und eine Datei zuverlässig an einen entfernten Server senden möchten.
Ähnlich wie bei den oben genannten Optionen können Sie auch -C zusammen mit der -r-Flagge verwenden, um rekursiv zu komprimieren und Dateien auf eine entfernte Maschine zu übertragen. Zum Beispiel komprimiert der folgende Befehl und holt die Datei „backup.tar.gz“ von meinem entfernten Server ab:
scp -Cr [email protected]:/home/ramces/backups /home/ramces/
Optimierung einer Datenübertragung mit SCP
Im Großen und Ganzen bemüht sich SCP, den AES-128-Verschlüsselungsalgorithmus für alle seine Dateiübertragungen zu verwenden. Es gibt jedoch Situationen, in denen dieser spezielle Algorithmus für die Dateien, die Sie übertragen möchten, nicht geeignet ist.
Daher ist es möglich, SCP weiter zu optimieren und zu sichern, indem der Chiffrieralgorithmus für einen bestimmten Transfer direkt geändert wird. Dazu müssen Sie die -c-Flagge gefolgt von dem Chiffrieralgorithmus verwenden, den Sie verwenden möchten.
Zum Beispiel überträgt der folgende Befehl die Datei „backup.tar.gz“ an meinen Remote-Server unter Verwendung von AES-256:
scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
Darüber hinaus ermöglicht die Option -c auch, eine Liste von Chiffren bereitzustellen, die Sie für eine bestimmte Dateiübertragung verwenden möchten. Zum Beispiel verwendet der folgende Befehl sowohl AES-192 als auch AES-256 während der Übertragung der Datei „backup.tar.gz“ an meinen entfernten Server:
scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
Begrenzung der Bandbreitennutzung in SCP
Während das Komprimieren von Datei-Paketen Ihnen helfen kann, SCP bei schlechten Netzwerkbedingungen zu verwenden, ist es auch möglich, die Bandbreite zu begrenzen, die das Programm während einer Übertragung verwendet. Dies ist hilfreich in Fällen, in denen Sie eine abgerechnete Verbindung verwenden und nicht möchten, dass SCP Ihre Netzwerkbandbreite dominiert.
Um die effektive Bandbreite des Programms zu begrenzen, müssen Sie die -l-Flagge gefolgt von der oberen Grenze, die Sie in Kilobit pro Sekunde (Kb/s) wünschen, verwenden. Zum Beispiel wird der folgende Befehl die Datei „backup.tar.gz“ an meinen Remote-Server mit einer effektiven Bandbreite von 1.600 Kb/s übertragen:
scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/
Remote zu Remote Übertragung mit SCP
Neben dem Kopieren lokaler Dateien auf Ihren Remote-Server und umgekehrt können Sie SCP auch verwenden, um mehrere Remote-Server von Ihrem lokalen Rechner aus zu verwalten, da SCP nur mit Dateiübertragungen arbeitet und keine Unterscheidung zwischen einer lokalen und einer entfernten Maschine trifft.
Um zwischen zwei Remote-Servern zu übertragen, müssen Sie den Benutzernamen und die Adresse jedes dieser Maschinen ausdrücklich angeben. Zum Beispiel wird der folgende Befehl meine Datei „remote-backup.tar.gz“ zwischen meinen beiden Remote-Servern übertragen:
scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/
Verwendung eines Proxys mit SCP
Standardmäßig verwendet SCP die IP-Adresse Ihres lokalen Rechners, wenn es Dateien zwischen verschiedenen Hosts überträgt. Während dies in normalen Situationen völlig in Ordnung ist, kann es ein Problem sein, wenn Ihr lokales Netzwerk jede SCP-Aktivität einschränkt. Eine schnelle Möglichkeit, dieses Problem zu lösen, besteht darin, Ihre lokale Verbindung über einen SSH-Proxy zu leiten.
Um dies zu tun, müssen Sie die -o-Flagge gefolgt von der Option ProxyCommand verwenden. Dies ermöglicht Ihnen, eine grundlegende SSH-Verbindung zu einer neuen Maschine herzustellen, die wiederum Ihren SCP-Befehl ausführen wird. Zum Beispiel wird der folgende Befehl einen neuen SSH-Proxy mit einer entfernten Maschine erstellen und die Datei „backup.tar.gz“ damit übertragen:
scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/
Ändern des Standardports in SCP
Neben der Erstellung eines grundlegenden SSH-Proxys können Sie auch den Standardport für SCP ändern. Dies ist besonders hilfreich, wenn Sie Ihren Linux-Server sichern und keine Standardports exponieren möchten.
Um SCP mit einem anderen Port zu verwenden, müssen Sie die -P-Flagge gefolgt von der Portnummer verwenden, die Sie verwenden möchten. Zum Beispiel wird der folgende Befehl mein Verzeichnis „backup“ rekursiv kopieren und bei meinem Remote-Server über Port 2222 verbinden:
scp -r -P 2222 ./backup [email protected]:/home/ramces/
Verwendung des SCP-Stummmodus
Schließlich ist es auch möglich, alle Terminalausgaben von einem SCP-Befehl vollständig zu entfernen. Dies ist besonders nützlich, wenn Sie ein nicht interaktives Skript erstellen möchten, das auf Ihrem Rechner ausgeführt wird. Außerdem können Sie diesen Prozess vollständig automatisieren, indem Sie einen Cronjob erstellen und einen privaten SSH-Schlüssel auf Ihren Server übertragen.
Um eine stille SCP-Übertragung zu erstellen, müssen Sie die -q-Flagge verwenden. Zum Beispiel wird der folgende Befehl meine Datei „backup.tar.gz“ still zu meinem Remote-Server übertragen:
scp -q ./backup.tar.gz [email protected]:/home/ramces/
Häufig gestellte Fragen
Meine Remote-zu-Remote-Übertragung in SCP funktioniert nicht. Wie kann ich das beheben?
Dieses Problem liegt höchstwahrscheinlich an einem blockierten Port in einer der Konfigurationsdateien Ihrer Remote-Maschine. Um dieses Problem zu beheben, stellen Sie sicher, dass der Standardport für SSH in beiden Maschinen geöffnet ist.
Dieses Problem kann auch auftreten, wenn eine Ihrer Remote-Maschinen hinter einer CG-NAT-Verbindung steht. In diesem Fall wird jede Verbindung von außen zu Ihrer Remote-Maschine nicht ordnungsgemäß aufgelöst. Um dies zu beheben, müssen Sie ein Virtual-LAN-Programm wie Yggdrasil verwenden, das es Ihnen ermöglicht, durch CG-NAT zu „stechen“.
Ich habe einen SCP-Proxy ausgeführt und der Remote-Host hat die Verbindung geschlossen. Was kann ich tun?
Dieses Problem liegt höchstwahrscheinlich an einem Problem mit Ihrer Proxy-Maschine. Um einen SSH-Proxy ordnungsgemäß zu starten, stellen Sie sicher, dass die Maschine, die Sie verwenden möchten, den OpenSSH-Server und netcat hat. Um diese Programme unter Ubuntu zu installieren, führen Sie folgenden Befehl aus: sudo apt install ssh netcat.
Ist es möglich, alle verfügbaren Chiffren für SCP zu kennen?
Standardmäßig verlässt sich das SCP-Programm stark auf das SSH-Protokoll für seine kryptografischen Funktionen. Aus diesem Grund können Sie das SSH-Programm verwenden, um eine Liste der Chiffren zu drucken, die Sie zusammen mit SCP verwenden können. Zum Beispiel können Sie ssh -Q ciphers ausführen, um eine kurze Liste aller verfügbaren Chiffren auf Ihrem Rechner zu drucken.
Bildnachweis: Unsplash. Alle Änderungen und Screenshots von Ramces Red.