Mysql
 sql >> Database >  >> RDS >> Mysql

Connettiti a un server MySQL su SSH in PHP

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.