
Ich habe Schwierigkeiten zu verstehen, ob und wie Folgendes möglich ist.
Angenommen, ich habe eine Maschine T
(Ziel), auf die ich remote zugreifen möchte (idealerweise über ssh
).
T
befindet sich hinter einem Router/einer Firewall R
und ich kann Port (z. B.) 22
von nicht R
an Port 22
von weiterleiten T
. Kurz gesagt, es ist kein direkter ssh
Zugriff auf T
möglich.
Nun sagen Sie das
Ich habe eine Maschine
A
, über die ich die volle Kontrolle habe.Ich kann per SSH von
T
nachA
, d. h.T: ssh user@A
gelingt es.
Frage 1:kann ich dies verwenden, um auf die Shell T
von zuzugreifen? D. h. kann ich die von zu A
erstellte Verbindung verwenden , um von zu verwenden ?T
A
T
A
T ---> ssh ----> A # this is possible
T <--- ? shell ? <---- A # is this possible?
Frage 2:WennFrage 1ist möglich:
Angenommen, ich habe eine dritte Maschine L
(z. B. meinen Laptop) und möchte T
von aus auf die Shell von zugreifen L
. Kann ich per SSH-Tunnel A
auf zugreifen L
?
T ----> ssh ----> A <---- ssh < ---- L
T <------- ?? %&£€ ?? <------- L # is this possible?
jede Hilfe ist willkommen.
Antwort1
Dies ist selbstverständlich möglich.
Frage 1: ist Reverse-Tunneling über SSH möglich?
JaHier einige Antworten zum Thema Reservetunnelbau:
Fragebogen: Ist das Tunneln eines reservierten Tunnels möglich?
Ja, dies ist im Grunde ein SSH-Tunnel über einen Tunnel. Hier sind einige Antworten zum Thema Tunnel in einen Tunnel:
Antwort2
Ich mache das die ganze Zeit, nur in die andere Richtung. Bauen Sie zuerst einen umgekehrten SSH-Tunnel von T zum lokalen Host auf A auf, dann einen Tunnel von L zur A-Seite des AT-Tunnels, stellen Sie dann per SSH eine Verbindung zum lokalen Teil des LA-Tunnels her und stellen Sie die Remoteverbindung über LAT her.
In meinem Beispiel wartet A auf Port 22123 auf SSH-Verbindungen.
Lokal verwende ich den Benutzernamen „user“, remote ist es „user.name“.
Ich habe lokale Schlüssel namens „~/.ssh/A_id_rsa“ und „~/.ssh/T_id_rsa“, um mich mit den beiden Maschinen A bzw. T als „user.name“ zu verbinden.
Hier ist ein Skript zum Verbinden des TA-Tunnels, das auf T ausgeführt werden sollte.
#!/bin/bash SSH_KEY="-i /home/Benutzer.name/.ssh/A_id_rsa" REMOTE_USER="Benutzername" GATEWAY_MACHINE="A.Domäne.com" GATEWAY_SSH_PORT="22123" ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}
Hier ist ein Skript zum Verbinden des LA-Tunnels, das auf L ausgeführt werden sollte.
#!/bin/bash SSH_KEY="-i /home/Benutzer/.ssh/A_id_rsa" REMOTE_USER="Benutzername" GATEWAY_MACHINE="A.Domäne.com" GATEWAY_SSH_PORT="22123" ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}
Dann füge ich Folgendes zur Datei /etc/hosts meines lokalen Hosts hinzu, sodass ich die lokale Seite des Tunnels als T bezeichnen kann:-
127.0.0.1 T
Dann habe ich dieses Skript, in unserem Beispiel /usr/local/bin/T genannt, um eine Verbindung damit herzustellen
#!/bin/bash SSH_KEY="-i /home/Benutzer/.ssh/T_id_rsa" REMOTE_USER="Benutzername" ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T
Der TA-Tunnel ist umgekehrt, also -R, der LA-Tunnel ist lokal, also -L. Das -N in den Skripten verhindert, dass sie eine Shell für A starten, daher führe ich das normalerweise aus, entweder mit einem &, um es im Hintergrund auszuführen, oder drücke Strg+Z und führe bg aus, um es auszuführen, nachdem ich das Passwort zum Entsperren von A_id_rsa eingegeben habe, wenn ich es nicht bereits in meinen Schlüsselbund geladen habe.