2016-05-02 22 views
2

jetzt ich einen SSH-Tunnel erschaffe, also kann ich mit meiner Remote-Datenbank verbinden, aber aus irgendeinem Grund die Verbindung immer noch weigert ... mein Skript:Php - Pdo Ssh Tunnel

try { 

    $host = 'remote host'; 
    $sshuser = 'ssh user'; 
    $sshpass = 'ssh password'; 
    $dbuser = 'db user'; 
    $dbpass = 'db user'; 
    $dbname = 'db name'; 

    shell_exec("ssh -p$sshpass ssh -o StrictHostKeyChecking=no -f -L 3307:127.0.0.1:3306 [email protected]$host"); 

    $dbh = new PDO('mysql:host=127.0.0.1;port=3307;dbname=' .$dbname. '', $dbuser, $dbpass); 

    $sth = $dbh->prepare("SELECT * from table"); 

    $sth->execute(); 

    $result = $sth->fetchAll(); 

    print_r ($result); 

    shell_exec("kill $(ssh-pid)"); 

    $dbh = null; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

Und Als Ergebnis erhalte ich:

Error!: SQLSTATE[HY000] [1130] Host 'host' is not allowed to connect to this MySQL server 
+0

Bleibt der SSH-Tunnel aktiv? Wird ein Datenbankserver bereits lokal auf Port 3307 ausgeführt? Was ist die echte MySQL-Server-Verbindung/Auth-Berechtigung für diesen Benutzer? – mario

+0

Haben Sie eine Lösung gefunden? – PeMa

Antwort

1

Es ist eine ziemlich klare Fehlermeldung. MySQL-Benutzern wird basierend auf dem Benutzernamen und der IP-Adresse eine Berechtigung erteilt. Wahrscheinlich sind die Datenbankberechtigungen für Ihren Datenbankbenutzer nur auf localhost beschränkt.

Auf dem Datenbankserver, die Ergebnisse dieses Befehls überprüfen:

SELECT User, Host FROM mysql.User; 

Wenn Sie Ihren Benutzer und IP-Adresse keinen Eintrag sehen, werden Sie zu create a user mit den entsprechenden Berechtigungen benötigen.

+0

Ich bekomme diese Antwort nicht. Ich meine, das OP verwendet SSH, um sich beim Datenbankserver anzumelden. Daher sollte Localhost nur gut sein ?! Ist das nicht genau die Idee hinter dem Tunnel, nicht den Remote-Zugriff auf die MySQL-Datenbank direkt zu erlauben? – PeMa