Wie kopiere ich einen Ordner mit scp von remote nach local? [geschlossen]

2696

Wie kopiere ich einen Ordner von einem Remote-Host auf einen lokalen Host scp?

Ich sshmelde mich auf meinem Server an.
Dann möchte ich den Remote-Ordner fooin den lokalen kopieren /home/user/Desktop.

Wie erreiche ich das?

Slasengger
quelle
61
Die Frage des OP war, ob es möglich ist, Dateien von einem Remote-Host auf einen lokalen Host zu kopieren, während sie auf einen Remote-Host gesendet werden . Ich bin mir nicht sicher, warum keine einzelne Antwort seine Frage richtig beantwortet hat.
JeffDror
3
Die Prämisse der Frage ist falsch. Die Idee ist, nach dem Anmelden bei ssh, wie Dateien vom angemeldeten Computer zurück auf den angemeldeten Client verschoben werden. SCp ist sich jedoch der ssh-Verbindung nicht bewusst und kann sie auch nicht verwenden. Es stellt seine eigenen Verbindungen her. Die einfache Lösung besteht also darin, ein neues Terminalfenster auf der lokalen Workstation zu erstellen und scp auszuführen, das Dateien vom Remote-Server auf den lokalen Computer überträgt. Beispiel: scp -i Schlüsselbenutzer @ remote: / remote-dir / remote-file / local-dir / local-file
jeffmcneill
12
Die Frage mag nicht zum Thema gehören, ist aber auch der am höchsten bewertete Beitrag bei Google. Das Sperren bedeutet, dass niemand es aktualisieren kann, um eine bessere Lösung bereitzustellen.
Alex Harvey
3
Ich habe kürzlich eine ähnliche Frage zu Befehlszeilen für ein anderes Tool in SuperUser gestellt, die von den dortigen Mods nach StackOverflow verschoben wurde. Wie auch immer, ich stimme der Behauptung der Mods zu: Können wir dies bitte zu SuperUser verschieben und es freischalten lassen und weitere Antworten erhalten?
Nikhil VJ
3
Im Allgemeinen ist die gesamte "Off-Topic" -Reaktion auf den Stackoverflow der größte Fehler der Plattform. Übereifrige Martinets.
AdamC

Antworten:

4939
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Wenn Sie das abschließende '/' am Ende von foo nicht einfügen, verschieben Sie das Verzeichnis selbst (einschließlich des Inhalts) und nicht nur den Inhalt des Verzeichnisses.

Von man scp(Siehe Online-Handbuch )

-r Kopiert rekursiv ganze Verzeichnisse

Gryphius
quelle
1410
Ich google dies jedes Mal. Verwandte Comics: xkcd.com/1168
cptloop
10
Zwei nette Dinge, die ich gefunden habe: Das -CFlag fügt Komprimierung hinzu und das -cFlag ermöglicht es Ihnen, andere Verschlüsselungstypen für eine bessere Leistung zu übergeben, wie scp -c blowfish a@b:something . in Dimuthus Antwort zu sehen
Automatico
79
Verwenden Sie -p, um die Änderungszeiten, Berechtigungen usw. von Dateien beizubehalten. scp -pr user @ ...
Ber
27
Dieser Antwort fehlt eine wichtige Erklärung. Wirst du am Ende mit Desktop/foooder wirst du Desktop/allcontentsofFooGoherescp haben, scheint mir manchmal komisch zu sein, es macht eine Sache dann eine andere
Toskan
7
@Toskan mit scp -r [email protected]:/path/to/foo /home/user/Desktop/dir sollte am Ende mit Desktop/foo. Mit werden scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ Sie mit dem Inhalt von fooin Desktopund allen Unterverzeichnissen von foounterDesktop
Ioannis
307

Um die volle Leistung von scp nutzen zu können , müssen Sie die folgenden Schritte ausführen :

  1. Autorisierung des öffentlichen Schlüssels
  2. Erstellen Sie SSH-Aliase

Dann zum Beispiel, wenn Sie diese ~ / .ssh / config haben :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

Sie sparen sich die Passworteingabe und vereinfachen die scp- Syntax wie folgt :

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Darüber hinaus können Sie die Remote-Pfadvervollständigung verwenden:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Aktualisieren:

Remote - bash-completion Zur Aktivierung benötigen Sie bash-Shell auf beide haben <source>und <target>Hosts und ordnungsgemäß funktioniert bash-completion. Weitere Informationen finden Sie unter verwandten Fragen:

Wie aktiviere ich die automatische Vervollständigung für Remote-Pfade bei Verwendung von scp?
Vervollständigung der Registerkarte "SCP-Dateiname"

Alexander Yancharuk
quelle
12
Wusste nichts über die Konfigurationsdatei, das ist großartig!
Dmastylo
Tab-Vervollständigung ist Unsinn, wird nur vom lokalen Host für mich abgeschlossen.
Bernhard
14
@ b.long Die Frage lautet "So kopieren Sie den Remote-Ordner foo auf den lokalen Desktop". Meine Antwort lautet "scp -r prod: / path / foo / home / user / Desktop" . Ich hoffe, Sie können Beziehungen sehen.
Alexander Yancharuk
2
@Bernhard Für mich war das offensichtlich, weil ich Bash-Shell benutze. Danke, dass du mich darauf hingewiesen hast! Antwort aktualisiert.
Alexander Yancharuk
1
@Alexander Yancharuk: Danke für die Antwort, dies ist detaillierter als nur die Syntax allein zu behandeln.
Gladiator
217

So kopieren Sie alles vom lokalen Standort zum Remote-Standort (Upload)

scp -r /path/from/destination username@hostname:/path/to/destination

So kopieren Sie alles vom Remote-Standort zum lokalen Standort (Download)

scp -r username@hostname:/path/from/destination /path/to/destination

Benutzerdefinierter Port Wo xxxxist die benutzerdefinierte Portnummer ?

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Kopieren Sie in das aktuelle Verzeichnis von Remote nach Local

scp -r username@hostname:/path/from/file .

Hilfe:

  1. -r Kopieren Sie rekursiv alle Verzeichnisse und Dateien
  2. Verwenden Sie immer den vollständigen Standort von /, Holen Sie sich den vollständigen Standort vonpwd
  3. scp ersetzt alle vorhandenen Dateien
  4. hostname wird Hostname oder IP-Adresse sein
  5. Wenn ein benutzerdefinierter Port benötigt wird (neben Port 22), verwenden Sie -P portnumber
  6. . (Punkt) - bedeutet aktuelles Arbeitsverzeichnis. Laden Sie es vom Server herunter / kopieren Sie es und fügen Sie es nur hier ein.

Hinweis: Manchmal funktioniert der benutzerdefinierte Port nicht, da der Port in der Firewall nicht zulässig ist. Stellen Sie daher sicher, dass der benutzerdefinierte Port in der Firewall für eingehende und ausgehende Verbindungen zulässig ist

Shiv Singh
quelle
1
Es scheint (zumindest in neueren Versionen von Raspbian Jessie und Ubuntu), dass scp -P (Großbuchstabe P) für den Port verwendet, während ssh (seltsamerweise) -p (Kleinbuchstaben) verwendet.
Adam Plocher
-p ist reserviert, um "Änderungszeiten, Zugriffszeiten und Modi aus der Originaldatei" beizubehalten. Wenn du das also für den Port verwendest, funktioniert es wahrscheinlich nicht ;-) Es sei denn, du hast eine andere Version, die das Kleinbuchstaben p anders verwendet hat.
Adam Plocher
Mit ssh ja. Nicht mit scp (nehme ich an).
Adam Plocher
Was soll ich setzen, wenn das Verzeichnis ein Leerzeichen enthält?
Brethlosze
@hyprfrcb Verwenden Sie pwd, um Standort zu erhalten und zu verwenden
Shiv Singh
48

Was ich immer benutze ist:

scp -r username@IP:/path/to/server/source/folder/  .

. (Punkt) : es bedeutet current folder. Also vom Server kopieren und nur hier einfügen.

IP : Kann eine IP-Adresse wie 125.55.41.311oder eine Host- Adresse sein ns1.mysite.com.

Manish Shrivastava
quelle
9
Vielen Dank für den Hinweis, der .sich auf das aktuelle Verzeichnis bezieht!
Ericmjl
35

Es ist besser, zuerst den Katalog auf dem Remote-Server zu komprimieren:

tar czfP backup.tar.gz /path/to/catalog

Zweitens von der Fernbedienung herunterladen:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Extrahieren Sie am Ende die Dateien:

tar -xzvf backup.tar.gz
justi
quelle
10
"Besser" hängt in hohem Maße von den Daten ab, die Sie übertragen, und von dem Aufwand, ssh an den Server zu senden, um das Zippen / Entpacken durchzuführen. Und: Sie können scp mit dem -CFlag komprimieren , wie z scp -C a@b:bigfile ..
Automatico
4
Dies erinnert mich an den Kommentar von @cptloop! : D xkcd.com/1168
GoodSp33d
22

Und wenn Sie eine verdammt große Datei vom Remote-Speicherort herunterladen müssen und die Sicherheit nicht besonders wichtig ist, ändern Sie die SCP-Standardverschlüsselung (Triple-DES) in "Blowfish".

Dadurch wird die Kopierzeit für Dateien drastisch reduziert.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
quelle
2
Laut diesem Blog-Beitrag erhalten Sie eine noch bessere Leistung arcfouranstelle von blowfish, aber es hat Sicherheitslücken.
Automatico
20

Typisches Szenario,

scp -r -P port username@ip:/path-to-folder  .

mit einem Beispiel erklärt,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

wo,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G.
quelle
Vielen Dank für die Antwort. -P für einen bestimmten SSH-Port war hilfreich für mich.
Redoff
19

Gehen Sie zu Dateien in Ihrer Unity-Symbolleiste

Geben Sie hier die Bildbeschreibung ein

Drücken Sie Strg + l und schreiben Sie [email protected]

Der 192.168.1.103 ist der Host, den Sie verbinden möchten.

Das hier ein Beispiel

Geben Sie hier die Bildbeschreibung ein

Ronald
quelle
12

Die Frage war, wie man einen Ordner mit dem scpBefehl von remote nach local kopiert .

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Dies ist jedoch der bessere Weg sftp: SSH File Transfer Protocol (auch Secure File Transfer Protocol oder SFTP) ist ein Netzwerkprotokoll, das Dateizugriff, Dateiübertragung und Dateiverwaltung über jeden zuverlässigen Datenstrom bietet (Wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Für Hilfe zum sftpBefehl geben Sie einfach helpoder ein ?.

Fulvio
quelle
12

Wenn Sie auf "Zu viele Authentifizierungsfehler" stoßen, geben Sie den genauen SSH-Schlüssel an, den Sie Ihrem Server-Server hinzugefügt haben:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
Kaiser
quelle
5

Ich weiß nicht warum, aber ich musste vor der Quellserver-Direktive den lokalen Ordner verwenden. damit es funktioniert

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
quelle
1
Unter der Annahme, dass der Benutzer über Berechtigungen verfügt, können Sie einen absoluten Pfad ohne Verwendung root@
Jonathan