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

se connecter à la base de données mysql en utilisant la bibliothèque phpseclib

Tout d'abord, ne serait-il pas préférable d'autoriser l'accès à distance de cet utilisateur à mysql ? Cependant, je ne connais pas vos raisons.

La manière la plus courante et transparente serait de créer un tunnel ssh. Cela peut être fait de deux manières différentes. Si le port mysql (3306) n'est pas ouvert sur la machine mysql, vous aurez besoin d'un tunnel ssh inversé qui doit être ouvert par la machine distante. Connectez-vous à la machine mysql et lancez la commande suivante :

ssh -R 12345:localhost:3306 [email protected]_machine -N

Si le port mysql est ouvert sur la machine distante alors le tunnel peut être ouvert par la machine php :

ssh -f [email protected]_machine -L 12345:mysql_machine:3306 -N

Quelle que soit la manière dont les tunnels ont été créés, l'application PHP peut désormais simplement utiliser PDO et se connecter au port localhost 12345.

$pdo = new PDO('mysql:host=localhost;port=12345;dbname=test', $user, $password);

Tout le trafic sera crypté à travers le tunnel.

Si vous souhaitez simplement émettre quelques commandes simples, vous pouvez utiliser l'alternative suivante.

Le plus simple mais non sécurisé serait d'utiliser la commande suivante :

echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');

Ceci n'est pas sécurisé car d'autres utilisateurs du système pourraient voir le mot de passe.

Vous pouvez contourner le problème de sécurité en utilisant expect . expect est un programme qui peut transmettre le mot de passe à mysql de manière plus sécurisée. Assurez-vous que expect est installé sur le système distant. Voici un exemple utilisant le SHOW TABLES commande sur la base de données test :

include('Net/SSH2.php');

$ssh = new Net_SSH2('192.xxx.xxx.xxx');
if (!$ssh->login('ssh_user', 'ssh_password')) {
exit('Login Failed');
}

echo $ssh->exec('expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysql -uTHE_USER -p test -e "SHOW TABLES"
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "THE_PASSWORD\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF
');

Pour mieux comprendre ce qui se passe, j'ai récemment écrit un mon article de blog à ce sujet.