Übertragen von Dateien über SSH [geschlossen]

461

Ich bin SSHing auf einem Remote-Server in der Befehlszeile und versuche, mit dem scpBefehl ein Verzeichnis auf meinen lokalen Computer zu kopieren . Der Remoteserver gibt jedoch die Meldung "Verwendung" zurück:

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Ich möchte Dateien in beide Richtungen übertragen können. Nach dem, was ich gelesen habe, dachte ich, dass der obige Befehl zum Herunterladen und scp -p [localpath] [remotepath]Hochladen funktionieren würde ?

binärer Hummer
quelle

Antworten:

735

Sie müssen scpirgendwo etwas. Sie haben scp ./styles/, also sagen Sie sichere Kopie ./styles/, aber nicht, wohin Sie sie kopieren sollen.

Wenn Sie herunterladen möchten, wird im Allgemeinen Folgendes angezeigt:

# download: remote -> local
scp user@remote_host:remote_file local_file 

Wo local_filekönnte sich tatsächlich ein Verzeichnis befinden, in das die zu kopierende Datei gestellt werden soll? Beim Hochladen ist das Gegenteil der Fall:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Wenn Sie ein ganzes Verzeichnis kopieren möchten, benötigen Sie -r. Stellen Sie sich scpdas so vor cp, außer Sie können eine Datei nicht user@remote_host:filenur mit lokalen Dateien angeben .

Bearbeiten: Wie in einem Kommentar erwähnt, kann der Benutzer bei der Angabe einer Remote-Datei weggelassen werden, wenn die Benutzernamen auf dem lokalen und dem Remote-Host identisch sind.

Lemnisca
quelle
2
Beachten Sie, dass der Benutzername weggelassen werden kann, wenn der Benutzer auf dem Remote-Host und dem lokalen Host identisch ist: scp hello.c myserver.net:~/projects/
strager
Ja, stimmt, ich werde eine Notiz dazu hinzufügen. Ich habe den Benutzer eingeschlossen, weil dann die Beispiele, die ich gegeben habe, immer funktionieren werden. :)
Lemnisca
Ich habe es schwer .. ist das richtig. scp C: \ filename.txt server1 @ server2: home
Vincent
Bitte fügen Sie "donload" und "upload" fett formatiert hinzu.
Kursus
2
"Natürlich" (ich sage natürlich, weil ich gerade 15 Minuten damit verschwendet habe) Sie sollten nicht mit dem Remote-Host verbunden sein, während Sie versuchen, auf lokal "herunterzuladen", denn wenn Sie den Code von einer Remote-Instanz ausführen, wird "lokal" als "fern" interpretiert werden, wenn Sie sehen, was ich meine. Also nicht ssh zuerst ausgeführt.
PatrickT
164

Verwenden Sie beim Kopieren auf / von Ihrem Desktop-Computer WinSCP oder unter Linux unterstützt Nautilus SCP über die Option Mit Server verbinden.

scp kann nur Dateien auf einen Computer kopieren, auf dem sshd ausgeführt wird. Daher müssen Sie die Client-Software auf dem Remote-Computer von dem Computer ausführen, auf dem Sie scp ausführen.

Verwenden Sie beim Kopieren in der Befehlszeile:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

oder

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile
JeeBee
quelle
4
Du bist der Mann. Ich habe ein Blog in weniger als 10 Sekunden ohne zusätzliche Installation auf der Serverseite bereitgestellt!
PM
2
Das hat perfekt funktioniert. Ich habe msysgit in cmd verwendet, da es sowohl scp als auch ssh hat.
Ibn Saeed
3
Das hat perfekt funktioniert. Ich habe scp * user @ host: / path / to / where
Bastin Robin
3
Das sollte die beste Antwort sein.
Gsamaras
3
Vielen Dank für den WinSCP-Vorschlag. Viel einfacher als zu versuchen, alle diese Befehle manuell zu schreiben ...
Brian Leishman
23

Sie müssen sowohl Quelle als auch Ziel angeben. Wenn Sie Verzeichnisse kopieren möchten, sollten Sie die Option -r aktivieren.

So rekursiv kopieren Sie / home / user / what vom Remote-Server in Ihr aktuelles Verzeichnis:

scp -pr user@remoteserver:whatever .
Ken
quelle
19

Nein, Sie müssen scp [from] [to]immer noch auf die Art und Weise kopieren

Der Unterschied ist, dass Sie müssen scp -p server:serverpath localpath

Gareth
quelle
8
Was ist der Zweck von -p?
Qinjie
1
Von man scp: Behält Änderungszeiten, Zugriffszeiten und Modi aus der Originaldatei bei.
pjmil
4
Klar zu sein -pist hier nur enthalten, weil das OP die Flagge in seine ursprüngliche Frage aufgenommen hat. Es ist in keiner Weise relevant für die Antwort
Gareth