Ist es möglich, von einer entfernten zu einer lokalen zu wechseln, während Sie an der entfernten Station angemeldet sind und die IP-Adresse der lokalen Station nicht kennen?

29

Ich stelle regelmäßig fest, dass ich eine Datei von einer Remote-Terminalsitzung auf meinen lokalen Computer kopieren möchte. Normalerweise melde ich mich von der Remote-Sitzung ab und rufe eine scp-Übertragung von local auf, um die Datei von remote auf local zu kopieren. Aber das fühlt sich etwas langatmig an. Ich möchte die Datei übertragen, während ich über SSH an der Fernbedienung angemeldet bin, um Zeit zu sparen. Mein lokaler Computer ist über einen dynamischen IP-Bereich mit dem Internet verbunden, sodass ich mir nie ganz sicher bin, wie ich eine Remoteverbindung herstellen soll. Aber da die Remote-Sitzung von meinem Laptop ausgeht, muss es eine Verknüpfung in scp geben, um zu meinem Laptop zurückzukehren ... Richtig?

jnthnclrk
quelle

Antworten:

19

Sie können verwenden SSH-Tunneling dafür.

Mithilfe von Tunneling können Sie einen TCP-Port entweder von Ihrem lokalen Computer an den Remotecomputer oder vom Remotecomputer an Ihren lokalen Computer weiterleiten. Ich benutze es häufig, um z. SMTP- oder IMAP-Ports von einem Remotecomputer hinter einer Firewall zu meinem lokalen Computer (und dann lokal auf die Dienste zugreifen, als ob sie lokal ausgeführt würden).

Gehen Sie folgendermaßen vor, um Port 22 (SSH) von Ihrem lokalen Computer an den Remotecomputer weiterzuleiten:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Beachten Sie, dass localhost auf den lokalen Namen des Remotecomputers verweist.)

Nachdem Sie dies ausgeführt haben, sollten Sie in der Lage sein, nach Hause zu sshen mit:

ssh -p12345 [email protected]

Wenn Sie scp verwenden, würden Sie so etwas tun (scp hat ein P in Großbuchstaben für die Portweiterleitung):

scp -P12345 filename 127.0.0.1:/tmp/filename

Bei der Portweiterleitung in die andere Richtung (von Remote zu Local) wird -L anstelle von -R verwendet.

Die obigen Befehle setzen voraus, dass Sie einen Terminal-SSH-Client verwenden. Grafische Clients wie PuTTY für Windows unterstützen auch das Tunneln

Daniel Lundmark
quelle
Beantwortet nicht die Frage von OP, deren IP nicht statisch ist.
2
Sofern ich nichts verpasst habe, sollte dies für das OP in Ordnung sein, um eine Verbindung von der aktuell entfernten Maschine zurück zur lokalen Maschine herzustellen. Das Tunneln erfolgt über die SSH-Sitzung. Wenn die SSH-Verbindung vom dynamischen lokalen Computer zum Remotecomputer hergestellt wird, ist sie erfolgreich und kann daher einen Überwachungsport auf dem Remotecomputer einrichten, der dahin zurücktunnelt, woher er stammt.
Dazu muss OP auf seinem lokalen Computer einen SSH-Server einrichten und sich um die Authentifizierung kümmern. Dies kann in einigen Anwendungsfällen mehr Ärger bedeuten, als es wert ist.
Septagram
Dies funktioniert nicht nur für dynamische IPs, sondern auch für Firewalls, die ssh-Verbindungen von remote zu lokal verhindern. Sehr nützliche Antwort!
3
Sie können es noch bequemer haben, indem Sie die Weiterleitung des Remote-Ports mit der Taste einstellen ~C Flucht. Schreib einfach <Enter>~C-R 12345:localhost:22<Enter>und Sie haben Ihren Tunnel, ohne Ihre bereits eingerichtete SSH-Sitzung zu verlassen.
4

Versuchen Sie Folgendes in der Befehlszeile des Remotecomputers. Möglicherweise müssen Sie die Portweiterleitung auf Ihrem Router aktivieren.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Quelle: Scpen Sie einfach eine Datei zurück zu dem Host, von dem aus Sie eine Verbindung herstellen (commandlinefu.com)

Patrick McLaren
quelle
Um zu erklären, was dies für die Menschen bedeutet, ${SSH_CLIENT%% *} Geben Sie die IP Ihres lokalen Rechners aus. Der gesamte Befehl öffnet also eine scp-Sitzung vom Remote-Computer zum lokalen Computer, um Dateien zu übertragen. Dies ist nur möglich, wenn Sie vom Remotecomputer aus SSH auf Ihren lokalen Computer ausführen können.
bizi
Dies kann durch Hinzufügen von etwas wie weiter verbessert werden export ME="${SSH_CLIENT%% *}" in Ihre Shell-RC-Datei. Sie können dann einfach verwenden scp <file> $ME:<local path>
kralyk
1

Könnte sein zssh ?

zssh (Zmodem SSH) ist ein Programm zum interaktiven Übertragen von Dateien auf einen Remote-Computer unter Verwendung der Secure Shell (ssh). Es soll eine bequeme Alternative zu scp sein, die es ermöglicht, Dateien zu übertragen, ohne eine andere Sitzung zu eröffnen und sich erneut zu authentifizieren.

zssh ist ein interaktiver Wrapper für ssh

Es verwendet die ehrwürdigen rz, sz-Implementierungen der zmodem-Dateiübertragung.

RedGrittyBrick
quelle
1

Ich habe diese Frage positiv bewertet und möchte dies erreichen leicht auch.

Hier ist verwandte Antwort: Wie kann ich von einem Remote-Computer zu einem lokalen Computer wechseln, wenn ich mich außerhalb meines Heimnetzwerks befinde?

Sie müssen den Zugriff auf ssh von außerhalb Ihres Netzwerks zulassen. Dazu leiten Sie einen Port Ihres Breitband-Routers an die LAN-Adresse Ihres Servers weiter. Es gibt jedoch einige Sicherheitsbedenken, wenn Sie den SSH-Zugriff von außen zulassen. Daher sollten Sie sich auch mit Methoden zum Sichern von SSH, insbesondere der schlüsselbasierten Authentifizierung, und zum vollständigen Deaktivieren der Kennwortauthentifizierung befassen.

Michal Stefanow
quelle
0

Eine Lösung wäre, die ssh-Sitzung auf dem lokalen Computer zu unterbrechen, die Kopie auf dem lokalen Computer durchzuführen und dann die ssh-Sitzung dort fortzusetzen, wo Sie aufgehört haben.

Angenommen, ich bin verbunden mit myuser @ remote , und ich möchte die Datei kopieren lol.txt zu meinem lokalen Computer. Zuerst möchte ich ssh auf meinem lokalen Rechner anhalten. Normalerweise würden Sie verwenden Strg - Z zu suspendieren, aber dies funktioniert nicht in ssh, weil es an die Remote-Shell gesendet wird. Stattdessen müssen Sie die Escape-Sequenz ssh verwenden Eingeben ~ . Also, um ssh auszusetzen, drücken Sie Eingeben ~ Strg - Z . Jetzt können Sie Befehle auf Ihrem lokalen Computer ausführen und ausführen

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

Kopieren Sie die Datei und kehren Sie dann genau dort zu ssh zurück, wo Sie sie verlassen haben

user@localmachine:~$ fg


quelle
Aber das Problem ist nicht das Kopieren von Remote, das Problem ist das Kopieren von Remote.
alex
Nun, es funktioniert auch umgekehrt. Die Idee ist nur, dass Sie die Sitzung anhalten, anstatt sie zu beenden, was sie zumindest ein wenig vereinfacht.
Time Sheep
0

Wenn Sie eine einfachere Lösung wünschen, öffnen Sie einfach das Dropbox-Konto, gehen Sie zur Remote-Maschine und rufen Sie die geänderte Version von auf Hier ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

alex
quelle