Добрый вечер.
Пытаюсь сделать 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;
}