Jak ominąć firewall i NAT z odwrotnym tunelem SSH

[13]}próbuję wygenerować serwer SSH na maszynie za routerem.

Najpierw próbowałem powiązać SSH z moim publicznym adresem IP:

ssh -R 10002:localhost:22 <ip_address>

Następnie pojawia się prośba o hasło, jednak moje hasło nazwy użytkownika nie wydaje się działać.

Oczywiście znam swoje hasło do nazwy użytkownika, więc wydaje mi się, że próbuje uwierzytelnić się na innym komputerze w tej samej sieci.

Jakieś sugestie jak to naprawić?

Pomogłoby mi to również w każdej alternatywa dotycząca tworzenia serwera SSH za routerem, gdy nie masz dostępu do routera.

Porty w iptables są otwarte.

UPDATE

Zgodnie z sugestią Thomas Oster odpowiedź próbowałem następujących.

W maszynie za routerem wykonałem następujące polecenie:

$ ssh -R10002:localhost:22 <remote_public_ip_address> -l <my_remote_server_username>

<remote_ip_address> jako remote_ip_address serwera z publicznym IP i serwerem SSH na którym mam pełne Kontrola.

<my_remote_server_username> jako nazwa użytkownika serwera zdalnego.

Po tym, próbowałem połączyć się ze zdalnego serwera do serwera za routerem w następujący sposób:

$ ssh -p 10002 <remote_public_ip_address>

Jednak to polecenie wyświetla następujące wyjście:

ssh: connect to host <remote_public_ip_address> port 10002: Connection refused

Otworzyłem więc port 10002 w firewallu iptables używając następującego polecenia:

sudo iptables -A INPUT -p tcp --dport 10002 -j ACCEPT

Następnie wykonałem ponownie polecenie, ale wyświetla ten sam komunikat o błędzie.

In my machine behind router mam wszystkie porty otwarte w iptables.

UPDATE 2

Musisz zezwolić na przekierowanie portów w /etc/ssh / sshd_config remove_public_ip_address server

Próbowałem zezwolić na portforwarding w pliku sshd_config dodając To polecenie:

LocalForward 10002 <my_remote_public_server_ip>:22

Ale dał mi ten Komunikat o błędzie:

Bad configuration option: LocalForward

Po " ssh-R...."zostawiłeś otwarte okno?

Po wykonaniu tej komendy, to łączy się ze zdalną maszyną publiczną i tak, zostawiłem otwarte okno.

Czy można użyć SSH-p 10002 localhost na publicznym serwerze po powstaje tunel?

Tak, jeśli wykonam to polecenie na Publicznym Serwerze, łączy się po zapytaniu mnie o poświadczenia.

Spróbuj "SSH localhost" na maszynie za routerem, aby sprawdzić, czy sshd jest uruchomiony i działa.

To również działa.

Aktualizacja 3

Wreszcie udało mi się to zrobić (dzięki jeszcze raz Thomas Oster )

Będziemy pracować z trzema maszynami:

Maszyna docelowa: z którą chcemy się połączyć.

Serwer pośredniczący w połączeniu (w moim przypadku Linode)]}

Komputer domowy: gdzie będziemy mieli dostęp do maszyny docelowej.

Oto kroki, które wykonałem

Krok 1:

[destination computer]$ vi /etc/ssh/sshd_config

Dodaj opcję GatewayPorts:

GatewayPorts yes

Uruchom ponownie ssh.

Krok 2:

[destination computer]$ ssh -R 4040:localhost:22 middle-machine-user@middle-machine-public-ip

To połączy Twoją publiczną maszynę z docelowym komputerem przez port 4040

Połączy się ze środkową maszyną i wyświetli monit o terminal, musisz pozostawić tę kartę otwartą.

Krok 3:

Połącz się z domu:

ssh destination-user@destination-ip -p4040

Lub podłączyć od środka maszyna:

[home computer]$ ssh middle-machine-user@middle-machine-ip

[middle computer]$ ssh destination-user@localhost -p4040

Źródło

Author: Community, 2013-10-09

3 answers

Czy istnieje serwer ssh uruchomiony na publicznym "ip_address"? To, co próbujesz zrobić, to "otworzyć połączenie ssh do "ip_address", a następnie tunelować każde przychodzące żądanie na porcie 10002 do localhost:22".

Jeśli" ip-address " jest publicznym adresem IP Twojego routera dsl, musisz utworzyć przekierowanie portów w konfiguracji routera do twojego hosta: 22.

Jeśli nie masz dostępu do routera, jedyną możliwą rzeczą byłoby posiadanie dostępu do innego serwera z ssh w internet, z którego można tunelować.

# open a session to the public available machine and create a tunnel from port 10002 back  to your local sshd (22)
ssh -R 10002:localhost:22 ip_of_public_server
# as long as this session is open, all calls to the public available machine on port 10002 will be tunneled to your local machine (make sure sshd is running on port 22)
ssh -p 10002 ip_of_public_server
 5
Author: Thomas Oster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 10:57:15

Jak powiedziałeś mamy " destination machine "(gdzie chcemy połączyć się za pomocą ssh)," middle machine "(publiczny serwer pracujący jako spedytor)," other computers " (każdy inny komputer w sieci)

Jak powiedział @ thomas-oster musisz użyć

[destination computer] $ ssh -R 2222:localhost:22 ip_of_public_server

Jednak, aby tunel mógł się wiązać z 0.0.0.0 zamiast localhost, musisz użyć GatewayPorts w /etc/ssh/sshd_config na "środkowej maszynie" (Publicznym Serwerze):

GatewayPorts yes

Oczywiście musisz ponownie uruchomić sshd po dodaniu ta opcja.

Czytaj http://www.snailbook.com/faq/gatewayports.auto.html dla wyjaśnienia: "domyślnie SSH nasłuchuje tylko połączeń do przekierowanego portu pod adresem loopback"

To pozwoli Ci połączyć się z dowolnego komputera w sieci do komputera docelowego za pomocą adresu ip środkowego komputera (serwera publicznego):

[any computer on the net] $ ssh -p 2222 ip_of_public_server

Upewnij się, że firewall na Publicznym Serwerze zezwala na połączenia na port 2222 / tcp.

 5
Author: javierwilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-30 04:23:07

Ostatnio natknąłem się na ten sam problem, ale bez uprawnień roota na serwerze SSH.

Jak wspomniano {[2] } jest potrzebny, aby również klienci z sieci mogli połączyć się ze zdalnym portem przekierowującym na serwerze SSH. Domyślnie ustawiona jest na no. Tak więc, jeśli nie masz uprawnień roota, nie możesz zmienić ustawień SSHD, aby ustawić opcję GatewayPorts na true. Ale w takim przypadku możesz użyć następującego obejścia:

ssh -R 4041:localhost:22 myserver.com 'socat TCP-LISTEN:4040,fork TCP:127.0.0.1:4041'

Socat to świetne narzędzie sieciowe, które wiąże port TCP 4040 na interfejsie 0.0.0.0, więc jest on widoczny z sieci i przekierowuje cały ruch do 127.0.0.1:4041, gdzie SSHD nasłuchuje i przekierowuje go do portu klienta 22.

Więc jeśli ktoś chce podłączyć twój lokalny SSH na porcie 22 tak jak opisałeś (na kliencie) robi to:

ssh -p 4040 myserver.com 

I działa tak:

SSH client --> myserver.com:4040 (socat) --> 127.0.0.1:4041 (myserver.com, SSHD) --> SSH client port 22

Socat Może być zbudowany ze źródeł lub już zainstalowany w systemie. Jest obecny w RPMForge repozytoria Dla RHEL / CentOS (jednak jeśli nie masz uprawnień roota, nie możesz go zainstalować).

 1
Author: ph4r05,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-15 17:07:07