it-swarm.com.de

Wie scp zurück zu lokal, wenn ich bereits in Remote-Maschine ssh habe?

Häufig sehe ich mich mit dieser Situation konfrontiert: Ich habe mich auf einem Remote-Server angemeldet und einige Programme ausgeführt, und ich möchte deren Ausgabedateien zurück auf meinen lokalen Computer kopieren. Ich erinnere mich an den Dateipfad auf dem Remotecomputer, beende die Verbindung und scp [email protected]:filepath .

Offensichtlich ist das nicht optimal. Was ich suche, ist eine Möglichkeit, um mich scp-Datei auf den lokalen Computer zurück, ohne die Verbindung zu beenden. Ich habe ein bisschen gesucht, fast alle Ergebnisse zeigen mir, wie ich scp von meinem lokalen Rechner aus machen kann, den ich bereits kenne.

Ist das möglich? Besser noch, ist es möglich, ohne die IP-Adresse meines lokalen Rechners zu kennen?

19
laike9m

Wenn Sie eine sshd auf Ihrem lokalen Computer ausführen, ist dies möglich und Sie müssen Ihre ausgehende IP-Adresse nicht kennen. Wenn die Weiterleitung von SSH-Ports aktiviert ist, können Sie einen sicheren Tunnel auch dann öffnen, wenn Sie bereits eine SSH-Verbindung geöffnet haben und diese nicht beenden.

Angenommen, Sie haben eine SSH-Verbindung zu einem Server:

local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt  # now we have a file here

OK, jetzt müssen wir die Datei wieder auf unseren lokalen Server kopieren und aus irgendeinem Grund möchten wir keine neue Verbindung herstellen. OK, lass uns die ssh Kommandozeile bekommen, indem du Enter ~C drückst (Enter, dann Tilde, dann Großbuchstabe C):

ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward

Das ist wie bei den üblichen -L/R/D-Optionen. Wir brauchen -R, also drücken wir noch einmal Enter ~C und geben Folgendes ein:

ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.

Hier leiten wir den Port 2222 des Remote-Servers an den Port 22 des lokalen Computers weiter (hier muss der lokale SSH-Server an Port 22 gestartet werden; wenn er einen anderen Port abhört, verwenden Sie ihn statt 22).

Führen Sie einfach scp auf einem Remote-Server aus und kopieren Sie unsere Datei auf den Port 2222 des Remote-Servers, der dem Port 22 Ihres lokalen Computers zugeordnet ist (auf dem unsere lokale Variable sshd ausgeführt wird).

remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt                   100%    4     0.0KB/s   00:00

Wir sind fertig!

remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc

Tricky, aber wenn Sie wirklich nicht können Sie einfach scp von einem anderen Terminal aus ausführen, könnte dies helfen.

23
afenster

Ich fand diese Ein-Liner-Lösung auf SU viel einfacher als die akzeptierte Antwort. Da es eine Umgebungsvariable für die lokale IP-Adresse verwendet, denke ich, dass es auch die Anforderung des OP erfüllt, diese nicht vorher zu kennen.

basierend darauf, hier eine bash-Funktion zum "DownLoad" einer Datei (d. h. Push von einer SSH-Sitzung an einen festgelegten Ort auf dem lokalen Rechner)

function dl(){
    scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}

Jetzt kann ich einfach dl somefile.txt anrufen, während SSH in die Remote-Station eintritt und somefile.txt in meinem lokalen Downloads-Ordner angezeigt wird.

extras:

  • Ich verwende rsa-Schlüssel (ssh-copy-id), um die Kennwort-Eingabeaufforderung zu umgehen
  • Ich habe diesen Trick gefunden, um zu verhindern, dass die lokale Bashrc für den SCP-Aufruf verwendet wird

Hinweis: Dies erfordert einen SSH-Zugriff auf den lokalen Computer von einem entfernten Computer aus (ist dies häufig bei jedem der Fall?)

0
brotherJ4mes

Sie benötigen einen lokalen SSH-Server, der auf Ihrem Computer ausgeführt wird. Dann können Sie einfach:

    scp [-r] local_content [email protected]_local_machine_ip:

Auf jeden Fall müssen Sie Ihre Remote-Verbindung nicht schließen, um eine Remote-Kopie zu erstellen. Öffnen Sie einfach ein anderes Terminal und führen Sie dort scp aus.

0
Javier S.