Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Stellen Sie über SSH in PHP eine Verbindung zu einem MySQL-Server her

SSH-Tunnellösung

Richten Sie einen SSH-Tunnel zu Ihrem MySQL-Datenbankserver ein (aus Sicherheitsgründen über einen Jumpbox-Proxy).


(A) GUI-Tools

Abhängig von Ihren Anforderungen können Sie einen GUI-MySQL-Client mit integrierter SSH-Tunneling-Unterstützung wie Visual Studio Code verwenden Port weiterleiten / SSH-Tunnel erstellen , TablePlus oder verwenden Sie PuTTY um lokal einzurichten Portweiterleitung.

Auf macOS mag ich Secure Pipes oder TablePlus .


(B) Befehlszeile

Schritt 1.

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

Der Schlüssel hier ist das '-L' Schalter, der ssh mitteilt, dass wir local anfordern Portweiterleitung.

Ich habe mich für Port 3307 entschieden Oben. Der gesamte Datenverkehr auf meinem lokalen Maschine, die auf diesen Port gerichtet ist, wird nun über meinen ssh-Client 'port-forwarded' zum ssh-Server läuft auf dem Host unter der Adresse ssh-jumpbox.com .

Der Jumpbox-SSH-Proxyserver entschlüsselt den Datenverkehr und stellt in Ihrem Namen eine Netzwerkverbindung zu Ihrem MySQL-Datenbankserver her, 10.3.1.55:3306 , in diesem Fall. Der MySQL-Datenbankserver erkennt die eingehende Verbindung von der internen Netzwerkadresse Ihrer Jumpbox.


Syntax für die lokale Portweiterleitung
Die Syntax ist ein wenig knifflig, kann aber wie folgt angesehen werden:

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

Wenn Sie an den anderen Schaltern interessiert sind, sind sie:

-f (in den Hintergrund gehen)
-N (keinen entfernten Befehl ausführen)
-g (entfernten Hosts erlauben, sich mit lokalen weitergeleiteten Ports zu verbinden)

Authentifizierung mit privatem Schlüssel, fügen Sie den Schalter (-i) oben hinzu:

-i /path/to/private-key

Schritt 2.

Weisen Sie Ihren lokalen MySQL-Client an, sich über Ihren SSH-Tunnel über den lokalen Port 3307 auf Ihrem Computer (-h 127.0.0.1) zu verbinden, der nun den gesamten an ihn gesendeten Datenverkehr durch den SSH-Tunnel weiterleitet, den Sie in Schritt 1 eingerichtet haben.

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

Der Datenaustausch zwischen Client und Server wird jetzt über die verschlüsselte SSH-Verbindung gesendet und ist sicher.


Sicherheitshinweis
Tunneln Sie nicht direkt zu Ihrem Datenbankserver. Ein direkt über das Internet zugänglicher Datenbankserver ist ein großes Sicherheitsproblem. Machen Sie die Tunnel-Zieladresse zur Internetadresse Ihrer Jumpbox/Ihres Bastion-Hosts (siehe Beispiel in Schritt 1) ​​und Ihr Datenbankziel intern IP-Adresse Ihres Datenbankservers im Remote-Netzwerk. SSH erledigt den Rest.


Schritt 3.

Verbinden Sie nun Ihre PHP-Anwendung mit:

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

Danke an Chris Snyders toller Artikel Details zum SSH-Kommandozeilen-Tunneling für MySQL-Konnektivität.