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
MySQL Verbindung über SSH
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Re: MySQL Verbindung über SSH
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.
XXX ist dabei dein Webserver auf dem dem Datenbank läuft.
Re: MySQL Verbindung über SSH
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.
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
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
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
Hallo Markus,
hier mein Beispiel:
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
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;
}
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
Hi Eugen!
Nochmal Danke für die Info! Es ist eine mögliche Alternative zu VPN.
Viele Grüße,
Markus
Nochmal Danke für die Info! Es ist eine mögliche Alternative zu VPN.
Viele Grüße,
Markus