sql >> Database >  >> RDS >> Mysql

Maak verbinding met een MySQL-server via SSH in PHP

SSH-tunneloplossing

Stel een SSH-tunnel in naar uw MySQL-databaseserver (via een Jumpbox-proxy voor beveiliging).


(A) GUI-tools

Afhankelijk van uw vereisten kunt u een GUI MySQL-client gebruiken met ingebouwde SSH Tunneling-ondersteuning, zoals Visual Studio Code Een poort doorsturen / SSH-tunnel maken , TablePlus of gebruik PuTTY om lokaal in te stellen poort doorsturen.

Op macOS vind ik Secure Pipes leuk of TablePlus .


(B) Opdrachtregel

Stap 1.

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

De sleutel hier is de '-L' schakelaar die ssh vertelt dat we lokaal aanvragen poort doorsturen.

Ik heb ervoor gekozen om poort 3307 te gebruiken boven. Al het verkeer op mijn lokale machine die naar deze poort wordt geleid, wordt nu 'port-forwarded' via mijn ssh-client naar de ssh-server draait op de host op adres ssh-jumpbox.com .

De Jumpbox ssh-proxyserver decodeert het verkeer en brengt namens u een netwerkverbinding tot stand met uw MySQL-databaseserver, 10.3.1.55:3306 , in dit geval. De MySQL-databaseserver ziet de verbinding binnenkomen vanaf het interne netwerkadres van uw Jumpbox.


Syntaxis voor lokale poortdoorschakeling
De syntaxis is een beetje lastig, maar kan worden gezien als:

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

Als je geïnteresseerd bent in de andere schakelaars, dit zijn:

-f (ga naar achtergrond)
-N (voer geen commando op afstand uit)
-g (laat hosts op afstand verbinding maken met lokale doorgestuurde poorten)

Private Key Authentication, voeg (-i) schakelaar toe aan hierboven:

-i /pad/naar/private-sleutel

Stap 2.

Vertel uw lokale MySQL-client om verbinding te maken via uw SSH-tunnel via de lokale poort 3307 op uw computer (-h 127.0.0.1) die nu al het verkeer dat ernaar wordt verzonden doorstuurt via de SSH-tunnel die u in stap 1 hebt ingesteld.

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

Gegevensuitwisseling tussen client en server gaat nu over de versleutelde SSH-verbinding en is veilig.


Beveiligingsnota
Tunnel niet rechtstreeks naar uw databaseserver. Het hebben van een databaseserver die direct vanaf internet toegankelijk is, is een enorme beveiligingsaansprakelijkheid. Maak van het tunneldoeladres het internetadres van uw Jumpbox/Bastion Host (zie voorbeeld in stap 1) en uw databasedoel het interne IP-adres van uw databaseserver op het externe netwerk. SSH doet de rest.


Stap 3.

Verbind nu uw PHP-applicatie met:

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

Met dank aan Chris Snyder's geweldig artikel detaillering van ssh-opdrachtregeltunneling voor MySQL-connectiviteit.



  1. Een overzicht van de nieuwe DBaaS van MariaDB - SkySQL

  2. Hoe het langzame query-logboek in MySQL in te schakelen?

  3. Hoe u het maximale aantal verbindingen in PostgreSQL kunt verhogen

  4. Hoe kan ik SQL schrijven voor een tabel die dezelfde naam heeft als een beveiligd sleutelwoord in MySql?