Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connectez-vous à un serveur MySQL via SSH en PHP

Solution de tunnel SSH

Configurez un tunnel SSH vers votre serveur de base de données MySQL (via un proxy Jumpbox pour la sécurité).


(A) Outils d'interface graphique

Selon vos besoins, vous pouvez utiliser un client GUI MySQL avec prise en charge intégrée du tunnel SSH, comme Visual Studio Code Transférer un port / créer un tunnel SSH , TablePlus ou utilisez PuTTY pour configurer local transfert de port.

Sur macOS, j'aime Secure Pipes ou TablePlus .


(B) Ligne de commande

Étape 1.

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

La clé ici est le '-L' commutateur qui indique à ssh que nous demandons local transfert de port.

J'ai choisi d'utiliser le port 3307 au dessus de. Tout le trafic sur mon local la machine dirigée vers ce port sera désormais "port-forwarded" via mon client ssh au serveur ssh s'exécutant sur l'hôte à l'adresse ssh-jumpbox.com .

Le serveur proxy Jumpbox ssh décryptera le trafic et établira une connexion réseau à votre serveur de base de données MySQL en votre nom, 10.3.1.55:3306 , dans ce cas. Le serveur de base de données MySQL voit la connexion provenant de l'adresse réseau interne de votre Jumpbox.


Syntaxe de transfert de port local
La syntaxe est un peu délicate mais peut être vue comme :

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

Si vous êtes intéressé par les autres commutateurs, ce sont :

-f (aller en arrière-plan)
-N (ne pas exécuter de commande à distance)
-g (autoriser les hôtes distants à se connecter aux ports redirigés locaux)

Authentification par clé privée, ajoutez le commutateur (-i) ci-dessus :

-i /chemin/vers/clé-privée

Étape 2.

Dites à votre client MySQL local de se connecter via votre tunnel SSH via le port local 3307 sur votre machine (-h 127.0.0.1) qui transfère maintenant tout le trafic qui lui est envoyé via le tunnel SSH que vous avez établi à l'étape 1.

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

L'échange de données entre le client et le serveur est désormais envoyé via la connexion SSH cryptée et est sécurisé.


Note de sécurité
Ne vous connectez pas directement à votre serveur de base de données. Avoir un serveur de base de données directement accessible depuis Internet est un énorme problème de sécurité. Faites de l'adresse cible du tunnel l'adresse Internet de votre Jumpbox/Bastion Host (voir l'exemple à l'étape 1) et votre base de données cible l'adresse interne Adresse IP de votre serveur de base de données sur le réseau distant. SSH fera le reste.


Étape 3.

Connectez maintenant votre application PHP avec :

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

Crédit à Chris Snyder super article détaillant le tunneling de la ligne de commande ssh pour la connectivité MySQL.