Portweiterleitung und Zurückkopieren auf den lokalen Rechner

Portweiterleitung und Zurückkopieren auf den lokalen Rechner

Normalerweise melde ich mich per SSH in einem Netzwerk an und dann bei einem weiteren Computer, der wiederum per SSH zu meinem endgültigen Zielcomputer führt. Zum Beispiel ein Heimserver und dort bei einem der Computer meiner Familie. Das sieht ungefähr so ​​aus:

user0@inital:> ssh -P port_number user1@server
user1@server:> ssh -P port_number user2@final
user2@final:>

Sobald ich eingeschaltet bin, user2@finalmöchte ich (scp) zurück nach kopieren user0@inital.

Ich kann zum Beispiel eine lokale Portweiterleitung durchführen und von meinem lokalen Computer über den Server auf den Remote-Computer kopieren. Aufuser0@initial

 user0@initial:> ssh -L4321:final:22 -p 443 user1@server

Dies leitet den lokalen Port 4321von user0@initialvia user1@serveran den Port 22auf weiter user2@final. Dann weiter user0@initialdurch Ausführen von

  scp -P 4321 some_file  [email protected]:~/

Ich kann nach user2@finalüber kopieren user1@server.

user2@finalDie Frage ist, wie man die Dinge umkehrt und von nach zurückkopiert user0@initial.

Ich danke Ihnen für Ihre Hilfe.

Antwort1

Angenommen, Sie möchten den scp-Befehl in der Eingabeaufforderung von final ausführen:

# have the local client tell the remote server's sshd to listen on
# port 8765 (randomly chosen) and forward any connection it receives
# to the client which will connect to port 22 locally.
user0@initial:> ssh -R127.0.0.1:8765:127.0.0.1:22 -p 443 user1@intermediate

# On this machine have the client tell this remote server's (final's)
# to listen on port 9876 (randomly chosen) and forward any connection
# that it receives back to this client which will connect it to poirt
# 8765 locally.
user1@intermediate:> ssh -R127.0.0.1:9876:127.0.0.1:8765 user2@final

# Now that you are on the final server (final) you run scp, telling
# it to connect to localhost on port 9876.
# 
# So scp will connec to local (final's) port 9876, which is listened
# to by the local sshd based on our second command above.  That sshd
# will forward the connection to the ssh client that connected to it
# (on intermediate).
# 
# The ssh client on intermediate will connect to localhost:8765 as
# instructed which is a conenction to the sshd on intermediate that
# is listening on that port because it was instructed to do so by the
# ssh client on initial when it connected.
# 
# The sshd on intermediate will forward the conenction back to the
# client on initial which will, as instructed, connect to localhost:22
# on initial.
# 
# All this monkey motion means that now scp on final is "directly"
# connected to port 22 (sshd) on initial and can initiate a login
# and file transfer. to the ssh client that connected to it (on
# intermediate).
user2@final:> scp -P 9876 file_from_final 127.0.0.1:back_at_the_house

Beachten Sie, dass ich alle Ports auf 127.0.0.1 eingerichtet habe, was sie vor Missbrauch durch andere im Internet schützt (aber nicht vor anderen auf „Server“ oder „Final“).

Antwort2

Ja. Sie sollten einen Blick auf das Schlüsselwort ssh_config werfenProxy-Befehl

Gibt den Befehl an, der zum Herstellen einer Verbindung mit dem Server verwendet werden soll. Die Befehlszeichenfolge reicht bis zum Ende der Zeile und wird mit der Shell-Direktive „exec“ des Benutzers ausgeführt, um einen verzögerten Shell-Prozess zu vermeiden.

In der Befehlszeichenfolge wird jedes Vorkommen von '%h' durch den Hostnamen ersetzt, mit dem eine Verbindung hergestellt werden soll, '%p' durch den Port und '%r' durch den Remote-Benutzernamen. Der Befehl kann grundsätzlich alles sein und sollte von seiner Standardeingabe lesen und in seine Standardausgabe schreiben. Er sollte schließlich eine Verbindung zu einem sshd(8)-Server herstellen, der auf einer Maschine läuft, oder irgendwo sshd -i ausführen. Die Hostschlüsselverwaltung erfolgt unter Verwendung des Hostnamens des Hosts, mit dem eine Verbindung hergestellt werden soll (standardmäßig der vom Benutzer eingegebene Name). Wenn Sie den Befehl auf „none“ setzen, wird diese Option vollständig deaktiviert. Beachten Sie, dass CheckHostIP für Verbindungen mit einem Proxy-Befehl nicht verfügbar ist.

Diese Anweisung ist in Verbindung mit nc(1) und seiner Proxy-Unterstützung nützlich. Die folgende Anweisung würde beispielsweise eine Verbindung über einen HTTP-Proxy bei 192.0.2.0 herstellen:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

verwandte Informationen