MySQL Verbindung über SSH

Alles rund um die Programmierung mit Qt
Antworten
ekom
Beiträge: 5
Registriert: 21. August 2009 14:12

MySQL Verbindung über SSH

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Re: MySQL Verbindung über SSH

Beitrag 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.
ekom
Beiträge: 5
Registriert: 21. August 2009 14:12

Re: MySQL Verbindung über SSH

Beitrag 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.
Markus
Beiträge: 105
Registriert: 31. Januar 2005 16:21

Re: MySQL Verbindung über SSH

Beitrag 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
ekom
Beiträge: 5
Registriert: 21. August 2009 14:12

Re: MySQL Verbindung über SSH

Beitrag 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
Markus
Beiträge: 105
Registriert: 31. Januar 2005 16:21

Re: MySQL Verbindung über SSH

Beitrag von Markus »

Hi Eugen!

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

Viele Grüße,
Markus
Antworten