Russian Qt Forum

Qt => Базы данных => Тема начата: phpCoder от Январь 27, 2016, 20:24



Название: SSH + MySQL
Отправлено: phpCoder от Январь 27, 2016, 20:24
Добрый вечер.
Пытаюсь сделать SSH соединение к удаленной БД. Использую libssh.
Подключение через SSH делал так, как указано в примерах к библиотеки. Перенаправление портов тоже сделал. А что дальше делать? Если подключаться к MySQL серверу, то подключения не будет. Как я понял, нужна какая-то прослушка портов... Как это делать? Кто делал такие соединения, поделитесь знаниями.

Вот мой код:
Код
C++ (Qt)
bool DatabaseConnection::connect()
{
   Settings settings; const Settings::SSH &ssh{settings.loadSSH()}; ssh_key key;
   int code = ssh_pki_import_privkey_file("key.ossh", ssh.password.toStdString().c_str(), NULL, NULL, &key);
   if(code != SSH_OK)
   {
       _logger->logOnce("Не удалось прочитать приватный ключ!");
       return false;
   }
 
   ssh_options_set(_ssh, SSH_OPTIONS_HOST, ssh.host.toStdString().c_str());
   code = ssh_connect(_ssh);
   if(code != SSH_OK)
   {
       _logger->logSshErrorOnce("Не удалось подсоединиться к серверу!", _ssh);
       return false;
   }
   code = ssh_userauth_publickey(_ssh, ssh.login.toStdString().c_str(), key);
   if(code != SSH_AUTH_SUCCESS)
   {
       _logger->logSshErrorOnce("Не удалось пройти авторизацию на сервере!", _ssh);
       return false;
   }
   ssh_channel channel = ssh_channel_new(_ssh);
   code = ssh_channel_open_forward(channel, ssh.host.toStdString().c_str(), 22, "localhost", 3307);
   if(code != SSH_OK)
   {
       _logger->logSshErrorOnce("Не удалось создать ssh-канал!", _ssh);
       return false;
   }
 
   const Settings::Database &db{settings.loadDatabase()}; // остальные параметры устанавливаются в конструкторе (хост, порт...)
   _db.mydb.setUserName(db.login);
   _db.mydb.setPassword(db.password);
   _db.mydb2.setUserName(db.login);
   _db.mydb2.setPassword(db.password);
 
   if(!_db.mydb.open()) // тут сообщает о неуспехе... Что делать?
   {
       _logger->logDbErrorOnce("Не удалось подключиься к БД (mydb)!", _db.mydb.lastError());
       return false;
   }
   if(!_db.mydb2.open())
   {
       _logger->logDbErrorOnce("Не удалось подключиься к БД (mydb2)!", _db.mydb2.lastError());
       return false;
   }
   else _logger->success("Связь с БД установлена!");
 
   ssh_key_free(key);
   return true;
}


Название: Re: SSH + MySQL
Отправлено: phpCoder от Февраль 01, 2016, 13:08
Неужто никто не подключался к БД через SSH?