Kategorie: Domain Factory

Wie kann man bei DomainFactory auf die Datenbank in einem anderen Auftrag per PHP zugreifen?

Bei vielen Hostern kann man auf alle Datenbanken des Hosters, so man die Zugangsdaten hat, zugreifen. Bei einigen Hostern kann man sogar externen Zugriff auf die Datenbanken gestatten.
Bei DomainFactory geht das leider nicht ohne Weiteres. Auch wenn eine Konfigurierbarkeit der Zugriffsmöglichkeiten wünschenswert wäre, muss man doch auf die etwas unhandliche Variante des SSH-Tunnels zurückgreifen.

Sofern man auf der Konsole per SSH arbeitet, ist das nicht weiter schwierig. Auf Server A einfach

eingeben, dass passende Kennwort für den SSH-Benutzer auf Server B eingeben und fertig.

Wenn man jetzt auch gleich noch den Datenbankzugriff auf eine MySql5-DB auf Server B haben möchte, sieht das dann so aus:

Anschließend lässt sich über den Host 127.0.0.1 auf Port 3307 auf die Datenbanken auf Server B zugreifen.

Wenn man nun das Ganze in PHP abbilden möchte, lernt man schnell, dass man zwar mit shell_exec() die SSH-Verbindung anstoßen kann, aber eben nicht das Kennwort übergeben kann.

Die Lösung ist eigentlich ganz einfach. Man generiert entsprechende Schlüssel und anschließend funktioniert der Zugriff ohne Eingabe eines Kennwortes.

Folgendes ist zu tun.

Auf Server A (von dem aus auf Server B zugegriffen werden soll) auf der Konsole:

eingeben und alle Abfragen mit [RETURN] bestätigen.
Es werden dann im Verzeichnis .ssh zwei Dateien abgelegt. Der private Schlüssel id_rsa und der öffentliche Schlüssel id_rsa.pub.

Die Datei id_rsa.pub muss anschließend auf den Server B in das Verzeichnis .ssh kopiert werden und anschließend in authorized_keys umbenannt werden. Sollte die Datei authorized_keys schon bestehen, so ist die id_rsa.pub mit der authorized_keys zu konkatenieren.
Anschließend muss das Verzeichnis .ssh noch auf die Rechte 0700 und die Datei authorized_keys auf die Rechte 0600 gesetzt werden.

Ein Test auf der Konsole von Server A mit

sollte nunmehr eine SSH-Vergbindung mit Server B ohne Rückfrage nach einem Passwort aufbauen.

Sofern das alles funktioniert, kann man nunmehr per PHP den SSH-Tunnel aufbauen und sich dann mit der Datenbank verbinden:

Das “2>&1” kann man weglassen. Es sorgt lediglich dafür, dass in Verbindung mit der Option -v die Ausgaben der Konsole tatsächlich zurückgegeben werden.
Bei der mysqli-Verbindung muss zwingend 127.0.0.1 statt localhost angegeben werden, da ansonsten versucht wird, eine Socket-Verbindung statt einer Verbindung über Port 3307 aufzubauen, was natürlich nicht funktioniert.

Wie kann ich ein Python-Skript bspw. bei Domain Factory zur Ausgabe von Daten im Browser bewegen?

Während PHP-Skripte ohne Ausgabe von Headern, HTML-Gerüst oder sonstigen Tamm auskommen, verhält sich der Apache offensichtlich bei Python-Skripten etwas zickiger.

Ein Minimal-Skript, wie

läuft zwar wunderbar in der Shell, erzeugt aber, wenn es über die entsprechende URL aufgerufen wird, möglicher Weise einen Fehler 500.

Der Apache weiß also offensichtlich nicht, was er mit der Ausgabe machen soll und wie er sie behandeln soll.

Die Lösung ist relativ simpel:

sorgt dafür, dass auch der Aufruf im Browser klappt.