Soluzione tunnel SSH
Configura un tunnel SSH per il tuo server di database MySQL (tramite un proxy Jumpbox per sicurezza).
(A) Strumenti GUI
A seconda delle tue esigenze, puoi utilizzare un client MySQL con interfaccia grafica con supporto SSH Tunneling integrato come Visual Studio Code Inoltro di una porta/creazione di un tunnel SSH , TablePlus oppure usa PuTTY per configurare locale port forwarding.
Su macOS, mi piace Secure Pipes o TablePlus .
(B) Riga di comando
Passaggio 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected]
La chiave qui è la '-L' switch che dice a ssh che stiamo richiedendo local port forwarding.
Ho scelto di utilizzare la porta 3307 sopra. Tutto il traffico sul mio locale la macchina diretta a questa porta sarà ora 'port-forward' tramite il mio client ssh al server ssh in esecuzione sull'host all'indirizzo ssh-jumpbox.com
.
Il server proxy ssh di Jumpbox decrittograferà il traffico e stabilirà una connessione di rete al server del database MySQL per tuo conto, 10.3.1.55:3306
, in questo caso. Il server del database MySQL vede la connessione in arrivo dall'indirizzo di rete interno della tua Jumpbox.
Sintassi di port forwarding locale
La sintassi è un po' complicata ma può essere vista come:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com
Se sei interessato agli altri switch, sono:
-f (vai in background)
-N (non eseguire un comando remoto)
-g (consenti agli host remoti di connettersi alle porte locali inoltrate)
Autenticazione con chiave privata, aggiungi (-i) passa a sopra:
-i /percorso/della/chiave-privata
Passaggio 2.
Dì al tuo client MySQL locale di connettersi attraverso il tuo tunnel SSH tramite la porta locale 3307 sulla tua macchina (-h 127.0.0.1) che ora inoltra tutto il traffico inviatogli attraverso il tunnel SSH che hai stabilito nel passaggio 1.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
Lo scambio di dati tra client e server viene ora inviato tramite la connessione SSH crittografata ed è sicuro.
Nota di sicurezza
Non eseguire il tunneling direttamente al server del database. Avere un server di database direttamente accessibile da Internet è un'enorme responsabilità per la sicurezza. Fai in modo che l'indirizzo di destinazione del tunnel sia l'indirizzo Internet del tuo Jumpbox/Bastion Host (vedi esempio nel passaggio 1) e il tuo database come destinazione interno Indirizzo IP del server del database sulla rete remota. SSH farà il resto.
Passaggio 3.
Ora connetti la tua applicazione PHP con:
<?php
$smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
mysql_select_db( "db", $smysql );
?>
Ringraziamo Chris Snyder's ottimo articolo dettagliare il tunneling della riga di comando ssh per la connettività MySQL.