sql >> Databáze >  >> RDS >> Mysql

Připojte se k serveru MySQL přes SSH v PHP

Řešení tunelu SSH

Nastavte tunel SSH k vašemu databázovému serveru MySQL (pro zabezpečení přes proxy Jumpbox).


(A) Nástroje GUI

V závislosti na vašich požadavcích můžete použít klienta GUI MySQL s integrovanou podporou SSH Tunneling, jako je Visual Studio Code Přesměrování portu / vytvoření tunelu SSH , TablePlus nebo použijte PuTTY nastavit místní přesměrování portů.

Na macOS se mi líbí Secure Pipes nebo TablePlus .


(B) Příkazový řádek

Krok 1.

ssh -fNg -L 3307:10.3.1.55:3306 [email protected] 

Klíčem je zde '-L' přepínač, který říká ssh, že požadujeme místní přesměrování portů.

Rozhodl jsem se použít port 3307 výše. Veškerý provoz na mé místní stroj přesměrovaný na tento port bude nyní 'port-forwardován' přes mého ssh klienta na ssh server běžící na hostiteli na adrese ssh-jumpbox.com .

Proxy server Jumpbox ssh za vás dešifruje provoz a naváže síťové připojení k vašemu databázovému serveru MySQL, 10.3.1.55:3306 , v tomto případě. Databázový server MySQL vidí připojení přicházející z interní síťové adresy vašeho Jumpboxu.


Syntaxe místního předávání portů
Syntaxe je trochu složitější, ale může být viděna jako:

<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com

Pokud vás zajímají další přepínače, jsou to:

-f (přejít na pozadí)
-N (neprovádět vzdálený příkaz)
-g (umožnit vzdáleným hostitelům připojit se k místním předávaným portům)

Ověření soukromého klíče, přidejte přepínač (-i) k výše uvedenému:

-i /cesta/k/soukromému-klíči

Krok 2.

Řekněte svému místnímu klientovi MySQL, aby se připojil prostřednictvím vašeho tunelu SSH přes místní port 3307 na vašem počítači (-h 127.0.0.1), který nyní přesměruje veškerý provoz do něj odeslaný přes tunel SSH, který jste vytvořili v kroku 1.

mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase

Výměna dat mezi klientem a serverem je nyní odesílána přes šifrované připojení SSH a je bezpečná.


Bezpečnostní poznámka
Netunelujte přímo na váš databázový server. Mít databázový server přímo přístupný z internetu je velkou bezpečnostní zátěží. Udělejte z cílové adresy tunelu internetovou adresu vašeho hostitele Jumpbox/Bastion (viz příklad v kroku 1) a cíl vaší databáze jako interní IP adresa vašeho databázového serveru ve vzdálené síti. SSH se postará o zbytek.


Krok 3.

Nyní připojte svou aplikaci PHP pomocí:

<?php
      $smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
      mysql_select_db( "db", $smysql ); 
?>

Poděkování Chris Snyder's skvělý článek podrobně popisuje tunelování příkazového řádku ssh pro konektivitu MySQL.



  1. mysql SQL:konkrétní položka, která má být první, a potom seřadit zbývající položky

  2. Aktualizujte příkaz pomocí klauzule with

  3. Zjistěte, zda je omezení CHECK na úrovni sloupce nebo na úrovni tabulky v SQL Server (příklady T-SQL)

  4. Efektivní náhrady ISNUMERIC() na SQL Server?