Frage Wie kann man den SSH-Tunnel für die Öffentlichkeit zugänglich machen?


Nun, zurückverweisend auf Dies Frage, ich führe den Befehl

ssh -R 8080:localhost:80 -N root@example.com

auf einem Mac. Der Port, der getunnelt wird, arbeitet jedoch nicht öffentlich. Ich führe einen solchen Befehl aus, damit der lokale Port auf dem Remote-Computer geöffnet werden kann. Und es funktioniert, wenn ich den Port auf dem lokalen Host auf dem entfernten Computer öffne, aber wenn ich versuche, von meinem lokalen Computer aus auf die öffentliche IP-Adresse des entfernten Computers zuzugreifen, scheint der Port nicht offen zu sein. Wie würde ich den Tunnel öffentlich zugänglich machen?

EDIT: Es scheint, als ob die Remote-Seite nur auf localhost statt an alle Schnittstellen bindet.

EDIT 2: Der Client ist Mac OS X 10.6 und der Server ist Linux Mint, aber sie sind beide OpenSSH.


137
2018-04-27 22:14


Ursprung


Was bedeutet öffentliche IP? Wenn Sie versuchen, eine Verbindung zu einem lokalen Computer über den Router und über das Internet herzustellen, wird dies von den meisten Routern nicht zugelassen. - harrymc


Antworten:


Wenn Sie die Manpage für ssh überprüfen, finden Sie die Syntax für -R liest:

-R [Bindeadresse:]Hafen:Gastgeber:Hostport

Wann bind_address entfällt (wie in Ihrem Beispiel), ist der Port nur an die Loopback-Schnittstelle gebunden. Um es an alle Schnittstellen zu binden, verwenden Sie

ssh -R \*:8080:localhost:80 -N root@example.com

oder

ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com

oder

ssh -R "[::]:8080:localhost:80" -N root@example.com

Die erste Version bindet sich individuell an alle Schnittstellen. Die zweite Version erstellt eine allgemeine IPv4-only-Bindung, was bedeutet, dass der Port über IPv4 auf allen Schnittstellen zugänglich ist. Die dritte Version ist wahrscheinlich technisch äquivalent zu der ersten, aber wiederum erzeugt sie nur eine einzige Bindung an ::, was bedeutet, dass der Port über IPv6 nativ und über IPv4 erreichbar ist IPv4-zugeordnete IPv6-Adressen (funktioniert nicht unter Windows, OpenBSD). (Sie brauchen die Zitate, weil [::] könnte sonst als Glob interpretiert werden.)

Beachten Sie, dass wenn Sie OpenSSH verwenden sshd Server, der Server GatewayPorts Option muss aktiviert sein (einstellen yes oder clientspecified) damit das funktioniert (Datei überprüfen /etc/ssh/sshd_config auf dem Server). Sonst (Standardwert für diese Option ist no), erzwingt der Server immer, dass der Port nur an die Loopback-Schnittstelle gebunden wird.


282
2018-05-06 06:11



OH MEIN GOTT ES ARBEITET !!!!! Ich habe genau das 1 Million mal gemacht !! Das habe ich einfach vergessen * in bash gibt Dateien und ich brauchte \* - Trevor Rudolph
Ja, genau deshalb bevorzuge ich immer 0.0.0.0 - Es ist nur IPv4, aber es wird die meiste Zeit tun :) - Stefan Seidel
GatewayPorts hat mein Problem gelöst. - Sunry
GatewayPorts = yes (auf der Remote-sshd-Konfiguration) behob es auch für mich - Phil_1984_
"GatewayPorts ja" machte meinen Tag, danke @StefanSeidel - karser


Bearbeiten:

-g funktioniert für lokal weitergeleitete Ports, aber was Sie wollen, ist ein Reverse / Remote-Port, der anders ist.

Was du willst ist Dies.

Im Wesentlichen, auf example.com, einstellen GatewayPorts=clientspecified im /etc/ssh/sshd_config.

--- vorherige (falsche) Antwort ---

Verwenden Sie die Option -g. Von sshs Manpage:

-g     Allows remote hosts to connect to local forwarded ports.

32
2018-04-28 03:34



scheint nicht zu funktionieren ... es startet, aber ich kann nicht aus der Ferne verbinden - Trevor Rudolph
Versuche zu laufen netstat -elnpt von einem separaten tty, um herauszufinden, welche Ports an welche Adresse gebunden sind. Ohne -gsollte ein Port gebunden sein 127.0.0.1:PORT. Mit -gsollte es gebunden sein 0.0.0.0:PORT, die es remote zugänglich macht. - snapshoe
pastebin.com/q6f4kJyd - Trevor Rudolph
GatewayPorts=clientspecified oder GatewayPorts clientspecified - Trevor Rudolph
und füge ich das dem Client oder der Fernbedienung hinzu? - Trevor Rudolph


Hier ist meine Antwort für die Fertigstellung:

Ich habe es benutzt ssh -R ... zum Tunneln und Verwenden socat obendrein zum Umleiten von Netzwerkverkehr zu 127.0.0.1:

Tunnel gebunden an 127.0.0.1: ssh -R mitm:9999:<my.ip>:8084 me@mitm

sozat: mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999

Eine andere Option ist, einen lokalen Tunnel darüber zu machen, aber ich finde das viel Langsamer

mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost


10
2017-10-29 12:09



Ich mag die Tatsache, dass ich mich nicht mit der sshd-Konfiguration beschäftigen muss und dass ich alles ohne Sudo machen kann. Plus ich lerne, dass Socat existiert. Vielen Dank! - BrutusCat


Sie können auch eine Doppelweiterleitung verwenden, wenn Sie / etc / ssh / sshd_config nicht ändern möchten.

Erstes Weiterleiten an den temporären Port (z. B. 10080) auf dem Loopback-Gerät auf dem Remote-Computer, dann Verwenden von Local Forward zum Umleiten von Port 10080 auf 80 an allen Schnittstellen:

ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"

8
2017-08-01 22:37



Damit umgehen Sie die Weiterleitungsregeln! - Michael Schubert
Liebe diese Lösung. Große Problemumgehung, wenn Sie die Konfiguration auf dem Computer nicht ändern möchten - Grezzo


Verwenden Sie die Option "Gateway-Ports".

ssh -g -R REMOTE_PORT:HOST:PORT ...

Um das zu nutzen, müssen Sie wahrscheinlich hinzufügen "GatewayPorts yes"zu deinem Server /etc/ssh/sshd_config.


6
2018-04-28 13:58



Eigentlich hat das geklappt. Ich verwende eine EC2-Instanz als Weiterleitung zu meinem REST-Server. Auf diese Weise muss ich meinen Server nicht in die DMZ stecken und brauche keine öffentliche IP. Lustig genug, mit der ersten EC2-Instanz, die ich erstellt habe, ssh -R Remote_port: localhost: port xxx @ ec2xxx funktionierte gut, aber ich musste später aus irgendeinem Grund eine weitere Instanz erstellen und von diesem Punkt an bekam ich immer: connection verweigert. Benutzte tcpdump, um zu sehen, was ich bekam und es gab nicht viel Info. -g plus GatewayPorts hat es geschafft. - E.T


Wenn Sie die Konfiguration in Sie einfügen möchten ~/.ssh/config Anstatt Befehlszeilenparameter zu verwenden, können Sie versuchen, etwas wie

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

Denken Sie daran, dass die Firewall Ihres Remote-Hosts Verbindungen zu 8080 erlaubt und dass die GatewayPorts Option von Ihrem /etc/ssh/sshd config isnt nicht eingestellt no


0
2017-08-26 15:50