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

Opret forbindelse til en MySQL-server over SSH i PHP

SSH Tunnel Solution

Konfigurer en SSH-tunnel til din MySQL-databaseserver (gennem en Jumpbox-proxy for sikkerhed).


(A) GUI-værktøjer

Afhængigt af dine krav kan du bruge en GUI MySQL-klient med SSH Tunneling-understøttelse indbygget såsom Visual Studio Code Videresendelse af en port / oprettelse af SSH-tunnel , TablePlus eller brug PuTTY for at konfigurere lokalt port forwarding.

På macOS kan jeg godt lide Secure Pipes eller TablePlus .


(B) Kommandolinje

Trin 1.

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

Nøglen her er '-L' switch, som fortæller ssh, at vi anmoder om lokal port forwarding.

Jeg har valgt at bruge port 3307 over. Al trafik på min lokale maskine dirigeret til denne port vil nu blive 'port-viderestillet' via min ssh-klient til ssh-serveren kører på værten på adressen ssh-jumpbox.com .

Jumpbox ssh-proxyserveren dekrypterer trafikken og etablerer en netværksforbindelse til din MySQL-databaseserver på dine vegne, 10.3.1.55:3306 , I dette tilfælde. MySQL-databaseserveren ser forbindelsen, der kommer ind fra din Jumpbox' interne netværksadresse.


Syntaks for lokal portvideresendelse
Syntaksen er lidt vanskelig, men kan ses som:

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

Hvis du er interesseret i de andre switches, er de:

-f (gå til baggrunden)
-N (udfør ikke en fjernkommando)
-g (tillad fjernværter at oprette forbindelse til lokale videresendte porte)

Privat nøglegodkendelse, tilføj (-i) switch til ovenstående:

-i /sti/til/privat-nøgle

Trin 2.

Bed din lokale MySQL-klient om at oprette forbindelse gennem din SSH-tunnel via den lokale port 3307 på din maskine (-h 127.0.0.1), som nu videresender al trafik sendt til den gennem den SSH-tunnel, du oprettede i trin 1.

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

Dataudveksling mellem klient og server sendes nu over den krypterede SSH-forbindelse og er sikker.


Sikkerhedsnote
Lad være med at tunnelere direkte til din databaseserver. At have en databaseserver direkte tilgængelig fra internettet er et stort sikkerhedsansvar. Gør tunnelmåladressen til internetadressen på din Jumpbox/Bastion Host (se eksempel i trin 1), og din database målretter den interne IP-adressen på din databaseserver på fjernnetværket. SSH klarer resten.


Trin 3.

Tilslut nu din PHP-applikation med:

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

Kredit til Chris Snyder's fantastisk artikel detaljeret ssh-kommandolinjetunneling for MySQL-forbindelse.



  1. SQL IN vs SQL EKSISTERER

  2. Hvordan viser jeg kørende processer i Oracle DB?

  3. SQL-forespørgsel til at oprette tabel i MySQL

  4. Sådan fjerner du "X Rows Selected" i SQLcl &SQL*Plus (Oracle)