Ankündigung

Einklappen
Keine Ankündigung bisher.

ssh2_tunnel und mysql_connect

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ssh2_tunnel und mysql_connect

    Schönen Guten Tag,

    bis jetzt war das Forum immer hilfreich bei meinen Problemen nun hab ich aber eins, was hier noch nicht angesprochen wurde.

    Ich möchte von einer Domain auf die DB einer anderen Domain zugreifen, aber irgendwie geht das nicht, da man es leider nur per SSH lösen kann.
    PHP-Code:
    $connection ssh2_connect('domain.de'22);

    if (
    ssh2_auth_password($connection'user''userpassword')) {
      echo 
    "Authentication Successful!\n";
    } else {
      die(
    'Authentication Failed...');
    }
    Variante 1$tunnel ssh2_tunnel($connection'127.0.0.1'3306);
    Variante 2ssh2_exec($connection'ssh -L 3306:domain-mit-Datenbank.de:3306 domain-die-auf-datenbank-zugreifen-will.de');
        
    mysql_connect("127.0.0.1","db-user","db-user-passswort"3306) or die ("Keine Verbindung moeglich"); 
    Daraufhin bekomme ich immer egal welche Variante:
    mysql_connect() [function.mysql-connect]: Access denied for user 'db178931_5'@'localhost' (using password: YES)

    Das Problem wie ich gelesen habe ist, das ssh2_tunnel eine Ressource ist.

    Kann mir da irgendjemand helfen? Ich hab auch schon gegooglet, aber ich bin nirgends fündig geworden.
    Die Erweiterung ssh2 ist installiert und eine Lösung über Putty, was dann immer laufen muss ist nicht zulässig.


  • #2
    Zitat von Superguppi Beitrag anzeigen
    mysql_connect() [function.mysql-connect]: Access denied for user 'db178931_5'@'localhost' (using password: YES)
    Existiert ein entsprechender Nutzer-Account, sind die Zugangsdaten korrekt?
    Und erlaubt die DB überhaupt Verbindungen von ausserhalb?

    Kommentar


    • #3
      Ja die DB existiert mit dem Nutzer und dem Passwort. Ich nutze die DB ja auch auf einer Seite welche sich auf den gleichen Hoster befindet.
      Und auch der Zugriff von außerhalb auf die DB ist erlaubt, jedoch nur über SSH.
      Es geht auch wenn man Putty nutzt, da Putty auch einen SSH Tunnel anlegen kann.
      Jedoch möchte ich das komplett über PHP lösen.

      Kommentar


      • #4
        Zitat von Superguppi Beitrag anzeigen

        Kann mir da irgendjemand helfen? Ich hab auch schon gegooglet, ..
        Mit Yahoo habe ich folgendes gefunden..
        PHP-Editors - connecting to MySQL through ssh2_tunnel : MySQL Help

        Vielleicht hilft es ja ein Stück weiter...

        Grüße
        Thomas

        Kommentar


        • #5
          Diese Seite hatte ich auch schon gefunden jedoch steht da im Script selbst:

          Code:
          // Note: this script is only illustrative. Is not something to be used as is in the real world.
          und das macht mich stutzig.

          Außerdem nutzt er socket_create_listen, was der webspace anscheinend nicht unterstützt.

          Ich hab das Gefühl, dass die Lösung recht einfach ist, aber leider komme ich einfach nicht drauf.

          Kommentar


          • #6
            Zitat von Superguppi Beitrag anzeigen
            PHP-Code:
            $connection ssh2_connect('domain.de'22);
            [...]
            Variante 2ssh2_exec($connection'ssh -L 3306:domain-mit-Datenbank.de:3306 domain-die-auf-datenbank-zugreifen-will.de');
                
            mysql_connect("127.0.0.1","db-user","db-user-passswort"3306) or die ("Keine Verbindung moeglich"); 
            Da bekommt man ja ein knoten im Kopf. Du verbindest dich von A nach B, damit B ein Portforwarding auf A einrichten kann? Versuchs doch erstmal einfacher so in Form von
            PHP-Code:
            exec('ssh -f -L 3306:domain-mit-datenbank.de:3306 domain-mit-Datenbank.de'); 

            Kommentar


            • #7
              Im php|architect gab es mal einen Artikel dazu, ich kenne den Artikel aber nicht. Da steht auch nichts von MySQL. Aber vielleicht ist es Dir die $4,99 Wert.

              php|architect – February 2005 � php|architect

              Grüße
              Thomas

              Kommentar


              • #8
                Zitat von erc Beitrag anzeigen
                Da bekommt man ja ein knoten im Kopf. Du verbindest dich von A nach B, damit B ein Portforwarding auf A einrichten kann? Versuchs doch erstmal einfacher so in Form von
                PHP-Code:
                exec('ssh -f -L 3306:domain-mit-datenbank.de:3306 domain-mit-Datenbank.de'); 
                Na eigentlich möchte ich mich von A nach B verbinden, damit A ein Portforwarding nach B macht.

                Im php|architect gab es mal einen Artikel dazu, ich kenne den Artikel aber nicht. Da steht auch nichts von MySQL. Aber vielleicht ist es Dir die $4,99 Wert.

                php|architect – February 2005 � php|architect

                Grüße
                Thomas
                Hmmm, das werde ich mal morgen mal machen.

                Kommentar


                • #9
                  Hallo Zusammen,

                  @Superguppi: Hast du das Problem (per ssh2 einen Tunnel für einen Datenbank-Connect herzustellen) eigentlich gelöst bekommen?

                  Ich stehe vor einem ähnlichen Problem, nur gehts dabei um PostgreSQL. Hier eine kleine Übersicht: über den PHP-Code connecte ich mich per SSH2 auf dem Server:
                  PHP-Code:
                  if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
                  if(!(
                  $con ssh2_connect("44.44.44.4444"22))){ // log in at server 44.44.44.4444 on port 22
                      
                  echo "fail: unable to establish connection\n";
                  } else {
                      
                  $ssh_user 'user';
                      
                  $ssh_pass 'userpass';
                      if(!
                  ssh2_auth_password($con$ssh_user$ssh_pass)) { // try to authenticate with username root, password secretpassword
                          
                  echo "fail: unable to authenticate\n";
                      } else {
                          echo 
                  "okay: logged in...\n"// allright, we're in!
                          /* ++++ */
                      
                  }

                  Soweit funktioniert auch alles - es wird eine Verbindung hergestellt und die Passwortauthentifizierung funktioniert ebenfalls. Nun soll ein Tunnel erstellt werden, der es ermöglicht auf die entfernte Datenbank zu zugreifen. An obiger ++++ -Stelle folgt dafür nun dieser Code:
                  PHP-Code:
                          $tunnel ssh2_tunnel($con'localhost'5432);
                          
                          
                  $conn_string "host=localhost port=5432 dbname=postgres user=postgres password=postgres";
                          
                  $dbconn pg_connect($conn_string) or die("Konnte keine Verbindung aufbauen");
                          
                  $stat pg_connection_status($dbconn);
                          if (
                  $stat === PGSQL_CONNECTION_OK) {
                              echo 
                  'Verbindungsstatus ok';
                          } else {
                              echo 
                  'Verbindungsstatus bad';
                          } 
                  Dabei entsteht nun der Fehler: "Unable to connect to PostgreSQL server".
                  Um gleich etwaige Fragen auszuschließen: Richtet man über Putty.exe eine SSH Verbindung ein - d.h. connecten zum Server, einen Tunnel herstellen, dann authentifiezieren und Putty laufen lassen - funktioniert der Datenbankzugriff ohne weiteres - genau wie im Code programmiert. Der einzigste Unterschied den ich zwischen Putty und ssh2_connect erkennen kann ist der, dass beim Tunnel in Putty die entfernte Hostadresse mit Port - "Destination" - angegeben wird (z.B. localhost:5432 - da läuft die DB) UND auch der "Source"-Port auf dem Client z.B. 3333 (frei wählbar). Wenn ich aber die Methode ssh2_tunnel anschaue - da wird nur der Remote-Host angegeben. Der "Source"-Port, wie man ihn in Putty angeben konnte, bleibt außen vor!?

                  Vielleicht hat jemand ähnliches schon einmal ausprobiert und weiß wie man den Quell-Port bei dem obigen Konstrukt angibt - für eine Hilfestellung wäre ich dankbar.

                  Grüße Badi

                  Kommentar


                  • #10
                    Du missverstehst den Befehl ssh2_tunnel. Der Befehl baut zwar eine Verbindung zum angegebenen Hostort über die SSH Verbindung auf, gibt diese Verbindung aber als Socketstream zurück. Es ist nicht so das dieser Tunnel an einen lokalen Port "gebunden" wird.

                    Kommentar

                    Lädt...
                    X