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

connettersi al database mysql usando la libreria phpseclib

Innanzitutto, non sarebbe meglio consentire l'accesso remoto a quell'utente a MySQL? Tuttavia, non conosco le tue ragioni.

Il modo più comune e trasparente sarebbe creare un tunnel ssh. Questo può essere fatto in due modi diversi. Se la porta mysql (3306) non è aperta sulla macchina mysql, avrai bisogno di un tunnel ssh inverso che deve essere aperto dalla macchina remota. Accedi alla macchina mysql ed emetti il ​​seguente comando:

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

Se la porta mysql è aperta sulla macchina remota, il tunnel può essere aperto dalla macchina php:

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

Indipendentemente dal modo in cui sono stati creati i tunnel, l'applicazione PHP ora può semplicemente utilizzare PDO e connettersi alla porta localhost 12345.

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

Tutto il traffico verrà criptato attraverso il tunnel.

Se vuoi impartire solo un paio di semplici comandi potresti usare la seguente alternativa.

Il più semplice ma non sicuro modo sarebbe usare il seguente comando:

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

Questo non è sicuro perché altri utenti del sistema potrebbero vedere la password.

Puoi risolvere il problema di sicurezza utilizzando expect . expect è un programma che può passare la password a mysql in modo più sicuro. Assicurati che expect è installato sul sistema remoto. Ecco un esempio usando SHOW TABLES comando sul database 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
');

Per capire meglio cosa sta succedendo, ho recentemente scritto un mio articolo del blog a questo proposito.