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.
To również działa.Spróbuj "SSH localhost" na maszynie za routerem, aby sprawdzić, czy sshd jest uruchomiony i 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
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
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.
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ć).
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