Ř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.