Expert S - Datenbankverbindung über Remote SSH möglich?

  • Abend zusammen,


    ich versuche gerade vergeblich eine SSH-Verbindung mit Putty oder CMD aufzubauen.

    Bei CMD folgende Syntax ssh -p 3306 user@server oder auch ssh user@server ( Da ist Port 22 per Default).

    Bei Putty ähnliches vorgehen. Ich bekomme bei beiden immer ein "Connection timed out"


    Als IP-Adresse wird der Datenbankserver eingetragen 10.X.X.X und als User der Datenbankbenutzer. Ist die IP des DB-Servers ein Subnetz?

    Oder muss ich SSH explizit freischalten?


    Danke im Voraus.

  • Oh, da liegen aber einige Missverständnisse vor.


    1. 10.x.x.x ist eine private IP Adresse (https://de.wikipedia.org/wiki/Private_IP-Adresse). Die kannst du so von deinem PC aus gar nicht erreichen.

    2. Der DB Server der Shared Hosting Systeme wird keinen SSH Zugriff von außen zulassen. Zugriff auf die Datenbank hast du von deinem Webhosting Server aus (dort kannst du dich per SSH verbinden) und dort dann nur auf den Port des DB Dienstes (3306).


    Was hast du denn eigentlich genau vor?

  • Mir war nie bewusst dass ein Klasse A Netz generell private ist im Sinne von außen nicht erreichbar.


    Ich habe eine Java Anwendung die per Hibernate/JDBC auf ein lokale MySQL DB zugreift. Die möchte ich aber umschreiben und die Verbindung direkt mit meiner Netcup-DB aufbauen.

    Bevor ich aber das aber mache, wollte ich hier erst mal testen ob ich eine einfache Verbindung aufbauen kann extern.


    Anscheinend nicht.

  • Ich hatte leider nie so nen altes Produkt, aber im "neuen" Webhosting kann man beim Datenbank Nutzer wählen Zugriffssteuerung:

    *Nur lokale Verbindungen zulassen

    *Remoteverbindungen von beliebigem Host zulassen

    *Remoteverbindungen zulassen von...


    Die externe IP findet man im customercontrolpanel unter Produkte und dort bei der Übersicht.mysql.png


    Ich denke aber in dem Produkt müsste es auch sowas geben.


    Ansonsten eben über SSH Verbinden und Mysql einfach Tunneln.

  • Hallo Hades,


    mit der Option -p gibst du den Port an, auf dem der SSH Server lauscht. Die Option ist nur dann erforderlich, wenn der default Port des SSH Servers geändert wurde.


    Wie Paul schon schrieb..

    Auf 3306 lauscht lediglich der MySQL Server und das auch nur (per default) vom localhost aus. Der Tunnel mus somit bereits vorher stehen.


    In meinem Entwicklerteam lösen wir derlei Konstellationen gern über einen Microservices mit Spring Boot. Die Anweisungen werden an den Microservices übermittelt und die Ausführung erfolgt direkt auf dem Server.


    Ich bin noch recht neu im Thema aber wir nutzen dieses Verfahren recht erfolgreich für iOS Apps und Anbindung an Oracle.

  • Probiere mal ssh -L 127.0.0.1:3306:10.x.x.x:3306 user@server und dann kannst du mit deinem lokalen MySQL Client auf 127.0.0.1 dich verbinden und landest auf dem Netcup Server.


    Bei PuTTY gehst du über Connection -> SSH -> Tunnels :: Source-Port: 3306 | Destination: 10.x.x.x:3306 | Local | IPv4 -> Add

  • Per SSH kannst du dich meines Wissens nur mit dem Webserver verbinden, dass das direkt zum Datenbankserver auch geht glaube ich eher weniger. Mit der internen IP natürlich schon gar nicht. Am sichersten wäre wohl echt ein Tunnel, aber eine direkte Verbindung zum Datenbankserver, also bei der Datenbankverbindung die externe IP und den Port (3306) angeben, sollte auch funktionieren, ist aber halt nicht verschlüsselt. Um wenigstens eine Datenbankverbindung durch Dritte auszuschliessen, kann man dann bei der Datenbank "Remoteverbindungen zulassen von" (s.o.) die eigene(n) IP(s) eintragen.

  • Probiere mal ssh -L 127.0.0.1:3306:10.x.x.x:3306 user@server und dann kannst du mit deinem lokalen MySQL Client auf 127.0.0.1 dich verbinden und landest auf dem Netcup Server.


    Bei PuTTY gehst du über Connection -> SSH -> Tunnels :: Source-Port: 3306 | Destination: 10.x.x.x:3306 | Local | IPv4 -> Add

    Also ich bin wie folgt vorgegangen:

    ssh -L 127.0.0.1:3306:Datenbankserver_ip:3309 DenAllgemeinenUser@UndDieDomainMeinerHP

    Dann habe ich das Passwort eingegeben und das Login war erfolgreich.


    Dann habe ich das bei Putty eingestellt aber mir war nicht ganz ersichtlich was das bewirkt, habe aber Putty laufen lassen.


    Mit PHPMYAdmin habe ich versucht dann die Verbindung aufzubauen, dort kam dann in meiner Konsole folgende Ausgabe:

    Channel 2:open failed: admistratively prohibted: open failed


    Optionen wie sie nitram auf seinem Screen hat, habe ich mit meinem Panel gar nicht.

  • Channel 2:open failed: admistratively prohibted: open failed

    Die Zwei ist der Filedeskriptor für stderr. Ich gehe mal davon aus, dass der SSH-Daemon auf dem Webserver sowas nicht erlaubt. Schade. Damit ist meine Lösung hinfällig - evtl. kann hier der Support etwas richten.


    Optionen wie sie nitram auf seinem Screen hat, habe ich mit meinem Panel gar nicht.

    Das könnte daran liegen, dass du ein älteres Webhosting hast.

    Die gezeigten Optionen müssten eigentlich im CCP zu sehen sein. Hast du da mal nachgeguckt?


    Darf man fragen, was du da eigentlich vor hast? Ich sehe du nutzt PHPMyAdmin - das hast du doch auch im Webhosting.

    Alternativ kannst du dir auch Adminer in das Hosting packen. Das ist nur eine Datei.

  • Wie oben schon etwas umrissen, ich habe mir eine Java-Anwendung geschrieben die bisher ihre Daten in eine DB-SQLite speichert, also einer Standalone Datenbank ohne Serverumgebung. Die Daten die dort gespeichert werden, müssen dann von mir händisch aus der Datenbank exportiert werden als CSV und werden dann von mir in PHPMyAdmin importiert auf meinem Webhoster. Jetzt bin ich auf Hibernate umgestiegen und da ist SQLite nicht so geil, daher auch direkt der Gedanke dass alles über die Remote-MySQL-DB zu machen. Dann kann ich mir endlich das händische Exportieren sparen und habe statt 2 nur noch eine DB.


    Aber wenn die Verbindung nicht funktioniert, muss ich wohl doch das ganze mit JSON/XML umsetzen, da hatte ich bisher aber wenig Lust drauf, weil das bedeutet auch wieder ein serverseitiges Skript welches das ganze annimmt, welches ich programmieren muss. Ich suche halt eine Lösung die mir so wenig wie möglich Arbeit macht :D

  • Du kannst dir natürlich auch auf deinem Rechner ein MySQL DBMS installieren, oder auf einer virtuellen Maschine, extra Rechner, RaspberryPi & Consorten oder dir einen Server bei Netcup anmieten.


    Fertige MySQL Datenbanken kann man sich auch bei vielen Cloudanbietern direkt mieten.


    Ein Java Programm, welches ich verwende, hat im Hintergrund eine H2 Datenbank (meine ich). https://de.wikipedia.org/wiki/H2_Database

    Scheinbar hat das Teil auch einige Kompatibilitätslayer. Zumindest sollte es den SQL-99 Dialekt unterstützen.

  • Wie oben schon etwas umrissen,

    Hatte ich tatsächlich übersehen.



    Mir war nie bewusst dass ein Klasse A Netz generell private ist im Sinne von außen nicht erreichbar.

    Die Routing Klassen sind heutzutage nicht mehr relevant. Das 10.0.0.0/8er Netz ist aber ein sog. RFC1918 Netz, welche nicht öffentlich zugeteilt sind und für private Netze gedacht sind. Deswegen sind diese über das Internet nicht erreichbar.


    Zu den Netzen gehören auch 192.168.0.0/16 und 172.16.0.0/12.

    Bei IPv6 gehören u.A. fe80::/10 und fc00::/7

  • Ich habe MySQL mit PhpMyadmin und auch Postgres installiert local, das ändert aber nicht den Umstand dass die Daten meiner Anwendung die lokal auf dieser DB gespeichert sind, irgendwie auf meinen Webhoster landen müssen.


    Über einen Raspi habe ich auch schon nachgedacht um meine Wordpress Seite privat zu hosten. Aber die Kosten im Jahr für Strom und Domain sind minimal geringer als bisher für Netcup(pro Jahr 24€). Der Umstand dass ich keine großen Kenntnisse über Netzwerksicherheit habe, bereiten mir Kopfschmerzen, selbst bei diesem Hobbyprojekt mit einem Userstamm von 15 Usern :D.


    Ich verstehe gerade nicht was du mir mit der H2 DB Info vermitteln willst. Wie gesagt, ich will eigentlich nur noch eine DB, die die online ist, damit ich nicht immer exportieren/importieren muss von DB 1 zu DB 2.


    Fertige DBs über Cloud muss ich mir mal anschauen, aber ich gehe stark davon aus, dass die alle nicht sehr günstig sind.

  • Ich verstehe gerade nicht was du mir mit der H2 DB Info vermitteln willst.

    Ich hatte mich da eher auf die SQLite Alternative bezogen, da du ja kein SQLite haben wolltest.


    das ändert aber nicht den Umstand dass die Daten meiner Anwendung die lokal auf dieser DB gespeichert sind, irgendwie auf meinen Webhoster landen müssen.

    Ist nicht direkt das Hauptanwendungsgebiet eines Webhostings.

    Hier könnte ein neuerer Tarif von Netcup eine Lösung sein, da man da auch von extern auf die MySQL Datenbank zugreifen kann.

    Bei Uberspace kann man sich auch einen Webspace und oder eine Datenbank erstellen. Allerdings weiß ich nicht, ob man diese da auch auf einen Port binden kann, oder nur per Unix Domain Socket erreichbar ist. Da geht es anscheinend über den SSH Tunnel. Das ist aber auch eine Anlaufstelle für unerfahrene Administratoren um kostengünstig soetwas zu fahren.


    https://wiki.uberspace.de/database:mysql