Potrzebujesz dostępu do interfejsu internetowego, bazy danych PostgreSQL lub usługi administracyjnej, która nasłuchuje tylko na 127.0.0.1Otwarcie portu w zaporze serwera byłoby szybkie, ale usługa stałaby się wówczas dostępna z sieci, w której nie powinna się znajdować.
A Tunel SSH To przenosi połączenie do sesji SSH. W przypadku sporadycznego dostępu preferuję tę metodę: usługa pozostaje publicznie zamknięta i tylko komputer, który otwiera tunel, może z niej korzystać. Należy jednak wybrać prawidłowe przekierowanie i zweryfikować adres nasłuchu, szczególnie w przypadku… -R.

Przekieruj port do swojego komputera za pomocą -L
Przekierowanie lokalne -L Otwiera port na Twoim komputerze, a następnie przekierowuje połączenia do miejsca docelowego dostępnego z serwera SSH. Jego ogólna postać wygląda następująco:
ssh -L adres_lokalny:port_lokalny:host_docelowy:port_docelowy użytkownik@serwer_ssh
Aby dotrzeć do interfejsu HTTP, który nasłuchuje tylko na porcie 80 serwera zdalnego:
ssh -N -T -o ExitOnForwardFailure=tak
-L 127.0.0.1:8080:127.0.0.1:80
[email protected]
-Ltworzy przekierowanie lokalne;127.0.0.1:8080jest otwartym portem na twoim komputerze;127.0.0.1:80jest miejscem docelowym widzianym z serwera SSH;-Nunika uruchomienia polecenia zdalnego;-Tunika przydzielania terminala;ExitOnForwardFailure=takSesja zostanie zamknięta, jeśli protokół SSH nie będzie mógł utworzyć żądanego przekierowania.
Ta ostatnia opcja potwierdza utworzenie portu nasłuchującego. Nie dowodzi ona jednak, że usługa końcowa odpowiada. Zawsze testuj miejsce docelowe po otwarciu tunelu.
Dopóki zamówienie pozostaje otwarte, możesz przetestować usługę na swoim komputerze:
curl http://127.0.0.1:8080/
Adres znajduje się po prawej stronie -L zasługuje na twoją uwagę. W poprzednim przykładzie, 127.0.0.1 Dotyczy to serwera SSH, a nie Twojego komputera. Jeśli cel znajduje się na innym komputerze w sieci prywatnej, podaj jego adres prywatny:
ssh -N -T -o ExitOnForwardFailure=tak
-L 127.0.0.1:15432:10.20.0.15:5432
[email protected]
Następnie Twój klient PostgreSQL łączy się z 127.0.0.1:15432Bastion otwiera faktyczne połączenie z 10.20.0.15:5432Baza nie musi nasłuchiwać przez internet.
Sprawdź, czy tunel faktycznie nasłuchuje
Na swoim komputerze kontroluj port lokalny za pomocą SS :
ss -ltnp | grep ':8080'
ss -ltnp | grep ':15432'
Musisz obejrzeć sesję odsłuchową 127.0.0.1związane z procesem sshJeśli widzisz 0.0.0.0 Lub Port może być dostępny z innych interfejsów na komputerze. Zamknij tunel i utwórz go ponownie, jawnie określając 127.0.0.1.
Przewodnik po otwórz porty pod Linuksem z ss Szczegóły odczytu adresów nasłuchujących. Sprawdź również, czy serwer SSH może dotrzeć do miejsca docelowego:
curl -I http://127.0.0.1:80/
nc -vz 10.20.0.15 5432
Jeśli tunel zostanie utworzony, ale to kędzior lub Twój klient SQL otrzymuje Połączenie odrzuconeSSH prawdopodobnie działa. To miejsce docelowe nie nasłuchuje na podanym adresie lub porcie.
Użycie -R bez przypadkowego opublikowania usługi
Zdalne przekierowanie -R Działa odwrotnie. Otwiera port na serwerze SSH i przekierowuje go do usługi dostępnej z Twojego komputera. Przykład: uczynienie aplikacji lokalnej na porcie 3000 dostępną tylko z serwera zdalnego:
ssh -N -T -o ExitOnForwardFailure=tak
-R 127.0.0.1:9000:127.0.0.1:3000
[email protected]
Na serwerze zdalnym proces lokalny może teraz wywołać:
curl http://127.0.0.1:9000/
Domyślnie sshd łączy ten zdalny port z interfejsem pętli zwrotnej. Nie zastępuj 127.0.0.1 przez 0.0.0.0 Lub * bez decydowania, kto powinien móc dołączyć do usługi. Parametr serwera Porty bramy Może umożliwić nasłuchiwanie na innych interfejsach. Prosta lokalna demonstracja może wówczas stać się usługą udostępnioną w sieci.
Unikaj także tej opcji -G z lokalnym przekierowaniem, jeśli nie chcesz, aby inne komputery łączyły się z przekierowanym portem. Aby zminimalizować obciążenie, powiąż tunele z 127.0.0.1 po obu stronach.
Kontroluj ograniczenia serwera SSH
Jeśli SSH odpowiada administracyjnie zabronione Jeżeli przekierowanie zostanie odrzucone, zapoznaj się z aktualną konfiguracją serwera:
sudo /usr/sbin/sshd -T | grep -E '^(allowtcpforwarding|gatewayports|permitopen|permitlisten)'
Zezwalaj na przekazywanie Tcp może zezwalać na przekierowania lokalne, przekierowania zdalne, oba rodzaje przekierowań lub żadne z nich. Zezwolenie otwarte I Pozwól słuchać Te ograniczenia służą do ograniczenia dozwolonych miejsc docelowych i portów. Na serwerze współdzielonym są one lepszym rozwiązaniem niż przyznawanie globalnej autoryzacji wszystkim kontom.
Przed jakąkolwiek modyfikacją /etc/ssh/sshd_config lub plik pod /etc/ssh/sshd_config.d/Pozostaw bieżącą sesję otwartą i przetestuj składnię:
sudo /usr/sbin/sshd -t
Zrestartuj SSH dopiero po pomyślnym powrocie bez błędów. Pełna procedura jest opisana w artykule na temat ponowne uruchomienie usługi SSH w systemie UbuntuJeśli nadal używasz hasła do tego konta, zacznij od skonfiguruj klucz SSH.
Zapisz tunel cykliczny w ~/.ssh/config
W przypadku bazy danych używanej regularnie unikaj kopiowania długich poleceń. Dodaj dedykowany host w ~/.ssh/config :
Tunel hosta-db
Nazwa hosta bastion.example.net
Administrator użytkownika
Przekierowanie lokalne 127.0.0.1:15432 10.20.0.15:5432
ExitOnForwardFailure tak
ServerAliveInterval 30
ServerAliveCountMax 3
Zabezpiecz plik, a następnie otwórz tunel na pierwszy plan:
chmod 600 ~/.ssh/config
ssh -N -T tunel-db
Zalecam pozostawienie pierwszego wykonania na pierwszym planie. Natychmiast zobaczysz wszelkie błędy klucza, portu lokalnego lub przekierowania. Ctrl + C Zamknij tunel prawidłowo. Jeśli następnie uruchomisz go w tle za pomocą -FZidentyfikuj właściwy proces przed jego zatrzymaniem:
pgrep -af 'ssh.*15432'
zabij PID
Unikać zabij -9 Odruchowo. Zwykle wystarczy zwykły sygnał, aby zamknąć sesję i zwolnić port.
Diagnozowanie tunelu, który nie przechodzi
- Adres już używany Inny proces korzysta z portu lokalnego. Sprawdź to za pomocą
ss -ltnplub wybierz inny port. - Połączenie odrzucone :usługa docelowa nie nasłuchuje lub adres docelowy jest niepoprawny z punktu widzenia serwera SSH.
- Administracyjnie zabronione :Konfiguracja protokołu SSH blokuje przekierowanie lub ogranicza żądany adres docelowy.
- Limit czasu :Serwer SSH nie może nawiązać połączenia z celem z powodu routingu lub pośredniej zapory sieciowej.
- Spadający tunel :sprawdź stabilność połączenia i użyj
ServerAliveIntervalzamiast pętli, która restartuje SSH bez żadnej diagnozy.
Aby uzyskać szczegóły dotyczące negocjacji i przekierowań, tymczasowo dodaj -w :
ssh -v -N -T -L 127.0.0.1:8080:127.0.0.1:80 [email protected]
Tunel SSH chroni transport, ale nie koryguje praw dostępu usługi docelowej. Kontynuuj nasłuchiwanie w lokalnej pętli zwrotnej, korzystaj z ograniczonego konta SSH, kontroluj autoryzowane klucze i zamykaj sesję, gdy dostęp nie jest już potrzebny.
Składnia -L, -R, -N I -G są szczegółowo opisane w Oficjalna dokumentacja klienta OpenSSHSterowanie Zezwalaj na przekazywanie Tcp, Porty bramy, Zezwolenie otwarte I Pozwól słuchać są opisane w sshd_config(5).