GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich zurück zum lokalen scp, wenn ich bereits auf den Remote-Computer geshshed habe?

Vorausgesetzt, Sie haben einen sshd auf Ihrem lokalen Rechner ausgeführt wird, ist dies möglich und Sie müssen Ihre ausgehende IP-Adresse nicht kennen. Wenn die SSH-Portweiterleitung aktiviert ist, können Sie einen sicheren Tunnel öffnen, selbst wenn Sie bereits eine SSH-Verbindung geöffnet haben, und ohne diese zu 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 diese Datei zurück auf unseren lokalen Server kopieren, und aus irgendeinem Grund wollen wir keine neue Verbindung öffnen. OK, rufen wir die ssh-Befehlszeile ab, indem wir Enter ~C drücken (Eingabe, 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 genau wie das normale -L/R/D Optionen. Wir brauchen -R , also haben wir Enter ~C getroffen erneut und geben Sie Folgendes ein:

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

Hier leiten wir Port 2222 des Remote-Servers an Port 22 der lokalen Maschine weiter (und hier muss der lokale SSH-Server auf Port 22 gestartet werden; wenn er auf einem anderen Port lauscht, verwenden Sie ihn anstelle von 22).

Führen Sie jetzt einfach scp aus auf einem Remote-Server und kopieren Sie unsere Datei auf den Port 2222 des Remote-Servers, der dem Port 22 unserer lokalen Maschine zugeordnet ist (wo unser lokaler sshd läuft).

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

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


Ich fand diese Einzeiler-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, es nicht im Voraus zu wissen.

Darauf basierend ist hier eine Bash-Funktion zum "Herunterladen" einer Datei (d. h. Pushen von einer SSH-Sitzung an einen festgelegten Speicherort auf dem lokalen Computer)

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

Jetzt kann ich einfach dl somefile.txt anrufen während SSH in die Fernbedienung und somefile.txt erscheint in meinem lokalen Download-Ordner.

Extras:

  • Ich verwende RSA-Schlüssel (ssh-copy-id), um die Passwortabfrage zu umgehen
  • Ich habe diesen Trick gefunden, um zu verhindern, dass der lokale bashrc beim scp-Aufruf bezogen wird

Hinweis:Dies erfordert SSH-Zugriff auf den lokalen Computer von der Ferne (ist das oft bei jemandem der Fall?)


Linux
  1. SCP-Linux-Befehl – ​​So übertragen Sie SSH-Dateien von Remote auf Lokal

  2. Ssh – Eine Datei mit Ssh zurück auf das lokale System kopieren?

  3. Wie man über eine Zwischenmaschine scp??

  4. So senden Sie Daten von einer Remote-SSH-Sitzung an die lokale Zwischenablage

  5. Wie starte ich in Bash, wenn ich in meinen Server ssh'e?

So führen Sie SSH in ein bestimmtes Verzeichnis unter Linux aus

So führen Sie SSH in einen Docker-Container ein

4 Möglichkeiten zum Übertragen von Dateien zwischen Remote- und lokalen Systemen über SSH

Gewusst wie:FreeBSD-Fernverwaltung

So führen Sie SSH in WSL2 unter Windows 10 von einem externen Computer aus

Wie man SSH in einen Windows 10-Rechner von Linux ODER Windows ODER überall her einfügt