Wracając do tego pytania, uruchamiam polecenie
ssh -R 8080:localhost:80 -N [email protected]
na komputerze Mac. Jednak tunelowany port nie działa publicznie. Wykonuję takie polecenie, aby umożliwić otwarcie lokalnego portu na komputerze zdalnym. Działa to podczas otwierania portu na hoście lokalnym na komputerze zdalnym, ale kiedy próbuję uzyskać dostęp do publicznego adresu IP komputera zdalnego z mojego komputera lokalnego, port nie wydaje się być otwarty. Jak upublicznić tunel w sieci IP, aby każdy mógł uzyskać do niego dostęp?
EDYCJA: Wygląda na to, że strona zdalna wiąże się tylko na localhost zamiast ze wszystkimi interfejsami.
EDYCJA 2: Klientem jest Mac OS X 10.6, a serwerem Linux Mint, ale oba są OpenSSH.
ssh
ip
openssh
ssh-tunnel
Trevor Rudolph
źródło
źródło
Odpowiedzi:
Jeśli sprawdzisz stronę podręcznika dla ssh, przekonasz się, że składnia
-R
odczytuje:Kiedy
bind_address
zostanie pominięty (jak w twoim przykładzie), port jest związany tylko z interfejsem pętli zwrotnej. Aby powiązać wszystkie interfejsy, użyjlub
lub
Pierwsza wersja wiąże się indywidualnie ze wszystkimi interfejsami. Druga wersja tworzy ogólne powiązanie tylko IPv4, co oznacza, że port jest dostępny na wszystkich interfejsach przez IPv4. Trzecia wersja jest prawdopodobnie technicznie równoważna z pierwszą, ale ponownie tworzy tylko pojedyncze powiązanie
::
, co oznacza, że port jest dostępny natywnie przez IPv6 i przez IPv4 poprzez adresy IPv6 odwzorowane na IPv4 (nie działa w systemie Windows, OpenBSD) . (Potrzebujesz cudzysłowów, bo[::]
inaczej można by je interpretować jako glob).Pamiętaj, że jeśli używasz
sshd
serwera OpenSSH ,GatewayPorts
opcja serwera musi być włączona (ustawiona nayes
lubclientspecified
), aby to działało (sprawdź plik/etc/ssh/sshd_config
na serwerze). W przeciwnym razie (wartość domyślna dla tej opcji tono
) serwer zawsze wymusi powiązanie portu tylko w interfejsie pętli zwrotnej.źródło
*
w bash da pliki i potrzebowałem\*
0.0.0.0
- to tylko IPv4, ale przez większość czasu to zrobi :)Edytować:
-g
działa dla lokalnych portów przekierowanych, ale to, czego potrzebujesz, jest portem przekierowanym / zdalnym, który jest inny.Co chcesz jest to .
Zasadniczo na
example.com
ustawićGatewayPorts=clientspecified
w/etc/ssh/sshd_config
.--- poprzednia (niepoprawna) odpowiedź ---
Użyj opcji -g. Ze strony podręcznika ssh:
źródło
netstat -elnpt
z osobnego terminalu, aby dowiedzieć się, które porty są powiązane z danym adresem. Bez-g
niego port powinien być związany127.0.0.1:PORT
. Za pomocą-g
należy go powiązać0.0.0.0:PORT
, co czyni go dostępnym zdalnie.GatewayPorts=clientspecified
lubGatewayPorts clientspecified
Oto moja odpowiedź na zakończenie:
Skończyło się
ssh -R ...
na tym, że użyłem do tunelowania i dodatkowosocat
do przekierowania ruchu sieciowego do127.0.0.1
:tunel powiązany z 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
Inną opcją jest wykonanie tunelu tylko lokalnego, ale uważam to za znacznie wolniejsze
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
źródło
socat
działało niesamowicie. Super przydatne, wkładając to do tylnej kieszeni;]Możesz także użyć podwójnego przekazywania, jeśli nie zmienisz / etc / ssh / sshd_config.
Najpierw przekieruj do portu tymczasowego (np. 10080) na urządzeniu sprzężenia zwrotnego na zdalnym komputerze, a następnie użyj lokalnego przekierowania tam, aby przekierować port 10080 na 80 na wszystkich interfejsach:
źródło
Użyj opcji „Porty bramy”.
ssh -g -R REMOTE_PORT:HOST:PORT ...
Aby tego użyć, prawdopodobnie musisz dodać „
GatewayPorts yes
” do serwera/etc/ssh/sshd_config
.źródło
Hosty Jump są dość nowym dodatkiem do OpenSSH. Wymaga to dostępu SSH do półproduktu, ale powinno działać bez dodatkowej konfiguracji.
To polecenie instruuje SSH, aby najpierw połączyć się
[email protected]
, a następnie z tego komputera, aby zainicjować połączenie z portem 8080 nalocalhost
(tj. Port, który jest tunelowany z hosta skoku do hosta zdalnego) podremoteuser
nazwą użytkownika.źródło
Jeśli chcesz wprowadzić konfigurację
~/.ssh/config
zamiast używać parametrów wiersza poleceń, możesz spróbować czegoś takiegoHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Pamiętaj, aby mieć zaporę zdalnego hosta zezwalającą na połączenia z 8080 i upewnić się, że
GatewayPorts
opcja/etc/ssh/sshd
konfiguracji nie jest ustawiona nano
źródło