Verwenden Sie scp, um eine Datei vom lokalen Verzeichnis X zum entfernten Verzeichnis Y zu übertragen


99

Ich habe mich hier bei anderen Fragen und in verschiedenen Tutorials zur "scp usage" im Internet umgesehen, aber ich kann nicht herausfinden, was los ist.

Ich benutze Linux Mint und versuche herauszufinden, wie scp funktioniert.

Ich habe eine Datei file.ext (auf meinem Computer) im Verzeichnis / home / name / dir /

Ich verbinde mich mit einer entfernten Maschine mit ssh , wie:

ssh -p 2222 username@domain

es fragt mich nach dem Passwort und die Shell zeigt an:

username@domain ~ $

Wenn ich jetzt den Befehl gebe (bevor ich ssh ausgeführt habe, befand ich mich im lokalen Verzeichnis / home / name / dir ):

scp -r -P 2222 file.ext username@domain 

Ausgabe ist:

cp: cannot stat ‘file.ext’: No such file or directory

Gleiches Ergebnis, wenn ich anstelle von file.ext den vollständigen Pfad schreibe

scp -r -P 2222 /home/name/dir/file.ext username@domain 

Der Serveradministrator teilte mir außerdem mit, dass ich die Datei in mein Remote-Ausgangsverzeichnis (anstelle von root) hochladen soll. Beispiel:

scp -r -P 2222 file.ext username@domain:~/

aber wenn ich es tue und "Enter" drücke, passiert nichts, als ob die Shell auf weitere Eingaben gewartet hätte.

Zusammenfassung meiner Probleme:

  • cp: keine solche Datei oder Verzeichnis
  • Shell "stecken" auf ~ /

Irgendwelche Vorschläge?


Es ist leicht unklar, ob Ihr Problem nur mit der falschen Maschine zusammenhängt. Können Sie bitte jedem Befehl den Host voranstellen, auf dem Sie ausgeführt werden? zB localuser@machineA: ssh -p 2222 username@domain(um anzuzeigen, dass Sie den Befehl ssh als localuser auf machineA ausführen)
umläute

1
Bei Verwendung scpmuss die entfernte Seite immer den Doppelpunkt enthalten (z. B. remotehost:/tmp), sonst wird nur eine normale Kopie erstellt ( scp /tmp/foo.txt example.comwird /tmp/foo.txtin eine lokale Datei example.com
kopiert

Entfernen Sie das -rFlag, da dies nicht zum Kopieren einzelner Dateien benötigt wird (es wird zum rekursiven Kopieren von Verzeichnissen verwendet)
umläute

Geben Sie den Befehl scp in der sshe-Sitzung aus ? Es wäre sinnvoll, wenn Sie sich auf dem lokalen Computer befinden.
Alexis

Antworten:


119

Sie müssen den scpBefehl auf dem lokalen Computer ausführen , nicht auf der Fernbedienung. Das brauchst du gar nicht ssh:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Das brauchst du auch nicht -r:

 -r      Recursively copy entire directories.  

Wenn Sie bereits am Remote-Computer angemeldet sind und von Ihrem lokalen Computer kopieren möchten, müssen Sie sicherstellen, dass Ihr lokaler Computer über das Internet erreichbar ist und ssheingerichtet wurde. Ich glaube nicht, dass Sie danach suchen, aber wenn ja, führen Sie dies einfach von der Fernbedienung aus:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
Vielen Dank. Das Problem war, dass ich versucht habe, scp in der SSH-Sitzung auszuführen. jetzt gehts!
Dragonmnl

28

Ich biete zwei Methoden zum Hoch- und Herunterladen von Dateien zwischen einem entfernten und einem lokalen Computer an (ich verwende Mac air):

In diesem Fall möchte ich "11.jpeg" zwischen lokal und remote hoch / runter setzen:

1.

Dateien vom Dienst in das lokale Verzeichnis kopieren: Sie müssen sich im lokalen Bash-Terminal befinden, um diesen Befehl ausführen zu können, nicht wenn Sie sich in ssh befinden!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

Kopieren von Dateien im lokalen Verzeichnis zum Remote-Dienst: Sie müssen sich auch im lokalen Bash-Terminal befinden

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Um die gleiche Absicht zu erreichen, wenn Sie sich bei SSH anmelden, müssen Sie zuerst "Systemeinstellungen"> "Freigabe"> "Remote-Anmeldung"> "Alle Benutzer" festlegen (ich bin nicht sicher, ob Sie "Alle Benutzer" festlegen müssen, aber dies funktioniert in dieser Situation ) "Der Mac teilt Ihnen mit" Um sich remote bei diesem Computer anzumelden, geben Sie Folgendes ein: ssh username @ xxxxxx, und geben Sie dann den folgenden Befehl ein:

    scp Benutzername @ domain: /home/xxx/xxx/11.jpeg Benutzername @ xxxxxx: / Users / username / Desktop /

Der obige Befehl dient zum Herunterladen von Dateien von Remote zu Local, wenn Sie sich bei ssh anmelden. Ändern Sie einfach die beiden Pfade, wenn Sie Dateien hochladen möchten.


Schließlich finde ich, dass Filezilla in der täglichen Arbeit wahrscheinlich am bequemsten ist ~~
maizer

5

Wenn Sie diesen scp-Befehl auf dem Remote-Computer ausführen, wird nach file.exteiner "lokalen" Datei gesucht , dh auf dem Remote-Computer.

Um eine Datei aus dem Remote - Rechner auf den lokalen einem zu kopieren, verwenden scp -P 2222 username@domain:dir/file.ext localdir(unter der Annahme , dass file.extin ~/dirauf dem Remote - Computer, wie in Ihrem Beispiel). Wenn Sie scpauf dem Remotecomputer ausgeführt werden, kehren Sie "local" und "remote" um.


1
Das OP möchte von lokal nach remote kopieren, siehe OP-Titel.
terdon

Ups, ich denke du hast recht. Aber er macht es anscheinend rückwärts ...
alexis

3

Verwenden Sie den scpBefehl

Wenn Sie einen Ordner übertragen möchten zip, können wir unzipihn erst später übernehmen.

Führen Sie auf Ihrem Computer Folgendes aus:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Hier rootist Ihr Konto und 10.145.198.100die IP-Adresse des Remoteservers. Wir werden in the_fileden ~/Ordner auf der Fernbedienung kopieren .

Datei entpacken:

$ unzip the_zip_file.zip -d destination_folder

Warum sollte rootder Remote-Computer überhaupt über SSH-Zugriff verfügen? Das ist ziemlich unsicher. Es ist besser, einen normalen Gebrauch zu machen und dann sudoalles zu tun, was root auf diesem Rechner zu tun hat.
Kusalananda

1

Nur ein kleiner Beitrag, vielleicht kann er Anfängern wie mir helfen: Der Pfad zum entfernten Verzeichnis sollte so geschrieben sein: username@domain:~/remote_directory

Was ich hier hervorheben möchte, ist, dass wir das immer hinzufügen sollten :~/


0

Lösung zum Kopieren von Dateien von Linux clientnachLinux Server

  1. Überprüfen Sie, ob sshdauf Ihrem Server Folgendes ausgeführt wird: ps aux | grep sshd

  2. Wenn nicht, installieren Sie OpenSSHmit sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Starten Sie Ihren Server neu und überprüfen Sie, ob sshder mit ausgeführt wird ps aux | grep sshd

  4. Bei Bedarf können Sie Ihre /etc/ssh/sshd_configDatei konfigurieren , dies ist jedoch für einfache Konfigurationen nicht erforderlich

  5. Vergewissern Sie sich, dass die Ports geöffnet sind netcat nc -v -z 127.0.0.1 22

  6. Um Dateien von einem LinuxClient auf einen LinuxClient zu kopieren, verwenden Sie scp wie folgt scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Um zu überprüfen, ob die Datei kopiert wurde, ssh username@10.22.33.45geben Sie Ihr Passwort ein.

Lösung zum Kopieren von Dateien Linux clientnach Windows

  1. Es gibt mehrere Clients für die Ausführung von SSH-Servern unter Windows, z. B. OpenSSH von MS

    MobaSSH

    Bitvise-SSH-Server

  2. Installieren Sie einen der oben genannten Server und stellen Sie sicher, dass Port 22 über geöffnet ist

    netsh advfirewall Firewall Regel hinzufügen name = "SSH Port 22" dir = in Aktion = Protokoll zulassen = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH-Port 22" dir = out action = Protokoll zulassen = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH-Port 22" dir = in action = Protokoll zulassen = TCP localport = 22

    netsh advfirewall firewall add rule name = "SSH-Port 22" dir = out action = Protokoll zulassen = TCP localport = 22

    netsh advfirewall hat den Status allprofiles deaktiviert

  3. Vergleiche dieser Server:

    Bitvise-SSH-Server

    1. Bietet nahezu native cmdEingabeaufforderung, powershellEingabeaufforderung, automatische Vervollständigung

    2. Bietet zusätzliche Anpassungsmöglichkeiten, falls Sie eine erweiterte Verwendung benötigen

    3. Die Benutzeranpassung für einfache Anforderungen ist 0. Ich habe innerhalb von 2 Minuten damit begonnen, nachdem ich viel Zeit damit verbracht hatte, zu arbeiten MobaSSHund OpenSSHzu arbeiten.

    4. So kopieren Sie Dateien mit scp: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Kostenlos für den persönlichen Gebrauch, 99 US-Dollar für den professionellen Gebrauch. Aufgrund der vielen Funktionen und der hervorragenden Integration ist der Preis das Geld wert

    MobaSSH:

    1. stellt ein Linux - Shell auf Fenster , in denen einfache Linux - Befehle wie ls, cp, findusw. arbeiten ähnlichMINGW64

    2. Sie können cmdund powershelldirekt durch Eingabe von cmdoder zugreifenpowershell

    3. Die Unicode-Unterstützung ist schlecht. Die Codierung ist nicht korrekt. Wenn Sie beispielsweise versuchen, den PythonInterpreter zu starten , stürzt er ab. Sie müssen die Codierung manuell über ( https://stackoverflow.com/a/12834315/4752883 ) ändern chcp 65001 set PYTHONIOENCONDING=utf-8 und anschließend die Python-Eingabeaufforderung starten

    4. Das Tolle an MobaSSH ist, dass es eine sehr einfache Benutzeroberfläche hat und scpund sshund gut integriert sind. So wird für einfache Anwendungsfälle gearbeitet

    5. So kopieren Sie Dateien von einem LinuxClient auf einen WindowsServer, der ausgeführt wird MobaSSH: use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Dies liegt daran, dass MobaSSHdie cygwinLaufwerke auf die gleiche Weise wie die cygwinLaufwerke zugeordnet sind.

    Verwenden Sie VMs von Microsoft mit OpenSSHv6.7, das unter https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ installiert wurde. OpenSSHv6.7 ist bereits installiert.

    1. Es ist sehr fehlerhaft und Sie müssen es stark anpassen.

    2. Befehlsabschluss funktioniert nicht

    3. Wenn Sie den Cursor auf dem Terminal bewegen, bleiben Leerzeichen

    4. Python funktioniert nicht

    5. Spätere Versionen von OpenSSH haben sich möglicherweise verbessert. Weitere MS scheinen OpenSSH über https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ verfügbar zu machen.Optional Features


-1

Wenn Sie zufällig auf OSX sind ...

Als ich versuchte, es mit username @ local auszuführen: / file_directory ...

Ich habe folgende Fehlermeldung erhalten:

ssh: local: node name or service name not known

Lösung

Auf meinem Mac musste ich Folgendes tun, um lokal einzurichten ssh:

'Systemeinstellungen' -> 'Internet & Netzwerk' -> 'Teilen' -> 'Remote- Anmeldung aktivieren '

Dieser lieferte dann den Benutzernamen @ IP-Adresse.


-1

Ich hatte heute das gleiche Problem auf MAC.

Geben Sie den folgenden Befehl ein:

scp /local-file-path/ /-remote-location-path/
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.