Seite 1 von 1

MySQL Verbindung über SSH

Verfasst: 21. Januar 2013 13:56
von ekom
Hallo,

hat schon jemand versucht in Qt ein Verbindung zu einem MySQL-Server über SSH aufzubauen?

Ich habe eine Anfrage bekommen, ein Tool zum Verwalten von Aufträgen zu entwickeln. Das Problem, die Datenbank befindet sich im Internet auf einem Webserver. Eine direkte Verbindung über den Port 3306 kommt wegen der Sicherheit nicht in Frage. Deswegen habe ich mir überlegt, einen SSH Tunnel zu verwenden.

Vielleicht hat jemand schon Erfahrung? Ein paar Tipps würden schon weiterhelfen.

Vielen Dank!

Gruß
Eugen

Re: MySQL Verbindung über SSH

Verfasst: 24. Januar 2013 10:12
von BartSimpson
Den Tunnel kannst mit einfach mittles ssh -L localhost:3306:localhost:3306 XXXX aufbauen.
XXX ist dabei dein Webserver auf dem dem Datenbank läuft.

Re: MySQL Verbindung über SSH

Verfasst: 24. Januar 2013 10:51
von ekom
Vielen Dank!

Habe inzwischen ein paar Tests gemacht und bin dann auch auf diese Möglichkeit gestossen.
Nur habe ich plink.exe benutzt, da das Programm unter Windows XP laufen soll. Mit QProzess starte ich plink.exe, die Verbindung wird im Hintergrund aufgebaut.

Ich würde sagen, das Problem ist gelöst.

Re: MySQL Verbindung über SSH

Verfasst: 28. Januar 2013 15:43
von Markus
Hallo Eugen!

Magst Du Deine Lösung mittls SSH bzw. plink.exe etwas genauer beschreiben (evtl. Auszug Sourcecode)?
Schonmal vielen Dank im voraus!

Viele Grüße,
Markus

Re: MySQL Verbindung über SSH

Verfasst: 29. Januar 2013 14:17
von ekom
Hallo Markus,

hier mein Beispiel:

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSql/QSqlDatabase>
#include <QSqlError>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(connectToDB()));

    this->myProcess=new QProcess(parent);
    QStringList arguments;
    arguments << "-ssh" << "yourserver.de" << "-l" << "ssh-username" << "-pw" << "ssh-password" << "-L" << " 3306:ip_or_name_of_your_mysql_server:3306";
    myProcess->start("echo y | plink.exe", arguments);
}

void MainWindow::connectToDB() {
    if (myProcess->isOpen()) {
        QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");
        db.setDatabaseName("testdb");
        db.setUserName("testuser");
        db.setPassword("testpassword");
        qDebug() << db.open();
        qDebug() << db.lastError();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
plink.exe soll natürlich im gleichen Verzeichnis mit yourproject.exe sein.

echo y | plink.exe ist für den Fingerprint Check notwendig. Sonst funktioniert die SSH Verbindung nicht, bzw. man muss den Fingerprint von dem Server in der Registry speichern.

Gruß
Eugen

Re: MySQL Verbindung über SSH

Verfasst: 30. Januar 2013 10:23
von Markus
Hi Eugen!

Nochmal Danke für die Info! Es ist eine mögliche Alternative zu VPN.

Viele Grüße,
Markus