Nun, unter Bezugnahme auf diese Frage führe ich den Befehl aus
ssh -R 8080:localhost:80 -N [email protected]
auf einem Mac. Der Hafen, der getunnelt wird, funktioniert jedoch nicht öffentlich. Ich führe einen solchen Befehl aus, damit der lokale Port auf dem Remotecomputer geöffnet werden kann. Und es funktioniert, wenn der Port auf localhost auf dem Remotecomputer geöffnet wird, aber wenn ich versuche, von meinem lokalen Computer aus auf die öffentliche IP-Adresse des Remotecomputers zuzugreifen, scheint der Port nicht offen zu sein. Wie würde ich den Tunnel auf der IP für jedermann zugänglich machen?
BEARBEITEN: Es scheint, als ob die Remote-Seite nur auf localhost statt an alle Schnittstellen bindet.
BEARBEITEN 2: Der Client ist Mac OS X 10.6 und der Server ist Linux Mint, aber beide sind OpenSSH.
quelle
Antworten:
Wenn Sie die Manpage auf ssh überprüfen, werden Sie feststellen, dass die Syntax für
-R
Folgendes lautet:Wenn
bind_address
(wie in Ihrem Beispiel) weggelassen wird, wird der Port nur an die Loopback-Schnittstelle gebunden. Verwenden Sie, um es an alle Schnittstellen zu bindenoder
oder
Die erste Version ist individuell an alle Schnittstellen gebunden. Die zweite Version erstellt eine allgemeine Nur-IPv4-Bindung, was bedeutet, dass der Port über IPv4 auf allen Schnittstellen zugänglich ist. Die dritte Version ist wahrscheinlich technisch mit der ersten äquivalent, erzeugt aber auch hier nur eine einzige Bindung an
::
, was bedeutet, dass der Port von Haus aus über IPv6 und über IPv4 über IPv4-zugeordnete IPv6-Adressen erreichbar ist (funktioniert nicht unter Windows, OpenBSD). . (Sie benötigen die Anführungszeichen, da[::]
sie ansonsten als Glob interpretiert werden könnten.)Beachten Sie, dass bei Verwendung eines OpenSSH-
sshd
Servers die ServeroptionGatewayPorts
aktiviert (aufyes
oder gesetztclientspecified
) sein muss, damit dies funktioniert (Datei/etc/ssh/sshd_config
auf dem Server prüfen ). Andernfalls (Standardwert für diese Option istno
) erzwingt der Server immer, dass der Port nur an die Loopback-Schnittstelle gebunden wird.quelle
*
in Bash Dateien geben wird und ich brauchte\*
0.0.0.0
- es ist nur IPv4, aber es wird die meiste Zeit tun :)Bearbeiten:
-g
Funktioniert für lokale weitergeleitete Ports, aber Sie möchten einen umgekehrten / entfernten weitergeleiteten Port, der anders ist.Was Sie wollen, ist das .
Im Wesentlichen auf
example.com
, setzenGatewayPorts=clientspecified
in/etc/ssh/sshd_config
.--- vorherige (falsche) Antwort ---
Verwenden Sie die Option -g. Aus der Manpage von ssh:
quelle
netstat -elnpt
von einem separaten Tty aus herauszufinden, welche Ports an welche Adresse gebunden sind. Ohne-g
sollte ein Port gebunden sein127.0.0.1:PORT
. Mit-g
sollte es gebunden sein0.0.0.0:PORT
, was es aus der Ferne zugänglich macht.GatewayPorts=clientspecified
oderGatewayPorts clientspecified
Hier ist meine Antwort zur Vervollständigung:
Am Ende habe ich
ssh -R ...
für das Tunneln undsocat
darüber hinaus für die Umleitung des Netzwerkverkehrs verwendet, um Folgendes zu erreichen127.0.0.1
:Tunnel gebunden an 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
socat:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
Eine andere Möglichkeit ist, einen lokalen Tunnel darüber zu erstellen, aber ich finde das viel langsamer
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
quelle
socat
super gearbeitet. Super nützlich, stecke dies in meine Gesäßtasche;]Sie können auch eine doppelte Weiterleitung verwenden, wenn Sie / etc / ssh / sshd_config nicht ändern können.
Leiten Sie zuerst an den temporären Port (z. B. 10080) des Loopback-Geräts auf dem Remote-Computer weiter, und verwenden Sie dann die lokale Weiterleitung, um den Port 10080 an allen Schnittstellen auf 80 umzuleiten:
quelle
Verwenden Sie die Option "Gateway-Ports".
ssh -g -R REMOTE_PORT:HOST:PORT ...
Um dies zu nutzen, müssen Sie wahrscheinlich "
GatewayPorts yes
" Ihren Servern hinzufügen/etc/ssh/sshd_config
.quelle
Jump-Hosts sind eine relativ neue Erweiterung von OpenSSH. Dies erfordert SSH-Zugriff auf das Intermediate, sollte jedoch ohne zusätzliche Konfiguration funktionieren.
Dieser Befehl weist SSH an
[email protected]
,localhost
unter demremoteuser
Benutzernamen zuerst eine Verbindung zu Port 8080 (dh dem Port, der vom Sprunghost zum Remote-Host getunnelt wird) herzustellen und dann von diesem Computer aus eine Verbindung herzustellen .quelle
Wenn Sie die Konfiguration übernehmen möchten,
~/.ssh/config
anstatt Befehlszeilenparameter zu verwenden, können Sie Folgendes ausprobierenHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Denken Sie daran, dass die Firewall
GatewayPorts
Ihres Remote-Hosts Verbindungen zu 8080 zulässt, und stellen Sie sicher, dass die Option Ihrer/etc/ssh/sshd
Konfiguration nicht auf festgelegt istno
quelle