Rozwiązanie tunelowe SSH
Skonfiguruj tunel SSH do serwera bazy danych MySQL (przez proxy Jumpbox dla bezpieczeństwa).
(A) Narzędzia GUI
W zależności od wymagań możesz użyć klienta GUI MySQL z wbudowaną obsługą tunelowania SSH, takiego jak Visual Studio Code Przekazywanie portu / tworzenie tunelu SSH , TablePlus lub użyj PuTTY skonfigurować lokalnie przekierowanie portów.
W systemie macOS lubię Bezpieczne rury lub TablePlus .
(B) Wiersz poleceń
Krok 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected]
Kluczem jest tutaj '-L' przełącznik, który informuje ssh, że prosimy o lokalne przekierowanie portów.
Wybrałem port 3307 nad. Cały ruch w moim lokalnym komputer skierowany na ten port będzie teraz „przekierowywany” przez mojego klienta ssh do serwera ssh działa na hoście pod adresem ssh-jumpbox.com
.
Serwer proxy ssh Jumpbox odszyfruje ruch i nawiąże połączenie sieciowe z serwerem bazy danych MySQL w Twoim imieniu, 10.3.1.55:3306
, w tym przypadku. Serwer bazy danych MySQL widzi połączenie przychodzące z wewnętrznego adresu sieci Jumpbox.
Składnia lokalnego przekierowania portów
Składnia jest trochę trudna, ale można ją zobaczyć jako:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com
Jeśli interesują Cię inne przełączniki, to:
-f (przejdź do tła)
-N (nie wykonuj zdalnego polecenia)
-g (zezwól zdalnym hostom na łączenie się z lokalnymi przekierowanymi portami)
Uwierzytelnianie klucza prywatnego, dodaj (-i) przełącznik do powyższego:
-i /ścieżka/do/klucza prywatnego
Krok 2.
Powiedz swojemu lokalnemu klientowi MySQL, aby łączył się przez tunel SSH przez lokalny port 3307 na twoim komputerze (-h 127.0.0.1), który teraz przekazuje cały ruch wysyłany do niego przez tunel SSH utworzony w kroku 1.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
Wymiana danych między klientem a serwerem jest teraz przesyłana przez szyfrowane połączenie SSH i jest bezpieczna.
Uwaga dotycząca bezpieczeństwa
Nie tuneluj bezpośrednio do serwera bazy danych. Posiadanie serwera bazy danych bezpośrednio dostępnego z Internetu jest ogromnym zagrożeniem bezpieczeństwa. Ustaw adres docelowy tunelu na adres internetowy swojego hosta Jumpbox/bastionu (patrz przykład w kroku 1), a baza danych jako adres wewnętrzny Adres IP serwera bazy danych w sieci zdalnej. SSH zrobi resztę.
Krok 3.
Teraz połącz swoją aplikację PHP z:
<?php
$smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
mysql_select_db( "db", $smysql );
?>
Kredyt dla Chrisa Snydera świetny artykuł szczegółowo opisujące tunelowanie wiersza poleceń ssh dla łączności MySQL.