Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz się z serwerem MySQL przez SSH w PHP

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie statystyk HAProxy dla MySQL i PostgreSQL

  2. Tabela aktualizacji MySQL na podstawie innej wartości tabeli

  3. Funkcja MySQL ROUND() — zaokrąglanie liczby do podanej liczby miejsc dziesiętnych

  4. DAYNAME() Przykłady – MySQL

  5. Android JDBC nie działa:ClassNotFoundException na sterowniku