SSH Tunnel Solution
Konfigurera en SSH-tunnel till din MySQL-databasserver (genom en Jumpbox-proxy för säkerhet).
(A) GUI-verktyg
Beroende på dina krav kan du använda en GUI MySQL-klient med SSH Tunneling-stöd inbyggt som Visual Studio Code Vidarebefordra en port / skapa SSH-tunnel , TablePlus eller använd PuTTY för att ställa in lokalt portvidarebefordran.
På macOS gillar jag Secure Pipes eller TablePlus .
(B) Kommandorad
Steg 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected]
Nyckeln här är '-L' switch som talar om för ssh att vi begär lokal portvidarebefordran.
Jag har valt att använda port 3307 ovan. All trafik på min lokala maskin som riktas till den här porten kommer nu att 'port-vidarebefordras' via min ssh-klient till ssh-servern körs på värden på adressen ssh-jumpbox.com
.
Jumpbox ssh-proxyservern kommer att dekryptera trafiken och upprätta en nätverksanslutning till din MySQL-databasserver å dina vägnar, 10.3.1.55:3306
, I detta fall. MySQL-databasservern ser anslutningen som kommer in från din Jumpbox interna nätverksadress.
Syntax för lokal portvidarebefordran
Syntaxen är lite knepig men kan ses som:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com
Om du är intresserad av de andra switcharna är de:
-f (gå till bakgrunden)
-N (kör inte ett fjärrkommando)
-g (tillåt fjärrvärdar att ansluta till lokala vidarebefordrade portar)
Privat nyckelautentisering, lägg till (-i) switch ovan:
-i /sökväg/till/privatnyckel
Steg 2.
Be din lokala MySQL-klient att ansluta genom din SSH-tunnel via den lokala porten 3307 på din maskin (-h 127.0.0.1) som nu vidarebefordrar all trafik som skickas till den genom den SSH-tunnel som du skapade i steg 1.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
Datautbyte mellan klient och server skickas nu över den krypterade SSH-anslutningen och är säkert.
Säkerhetsmeddelande
Tunnla inte direkt till din databasserver. Att ha en databasserver direkt tillgänglig från internet är ett stort säkerhetsansvar. Gör tunnelmåladressen till internetadressen för din Jumpbox/Bastion Host (se exempel i steg 1) och din databas inriktad på intern IP-adressen för din databasserver på fjärrnätverket. SSH gör resten.
Steg 3.
Anslut nu din PHP-applikation med:
<?php
$smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
mysql_select_db( "db", $smysql );
?>
Tack till Chris Snyder's bra artikel detaljerad ssh kommandorads tunnling för MySQL-anslutning.