Подключение к Unix серверу с PostgreSQL через libssh

249
26 января 2018, 23:13

Имеется сервер с Ubuntu. На нем установлена PostgreSQL. Пишу GUI приложение на C++ для удаленного управления БД. Для того, чтобы подключаться по SSH, в Visual Studio была установлена библиотека libssh. Проблема заключается в том, что C++ приложение не может подключиться к аккаунту psql. К самому серверу подключение проходит, можно зайти в dev аккаунт postgres, а в аккаунт управления БД не подключается.

Код установления сессии для соединения:

ssh_session my_ssh_session;
  int rc, auth;
  int port = 22;
  my_ssh_session = ssh_new();
  ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "188.120.*** . ***");
  ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, "root");
  ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);
  rc = ssh_connect(my_ssh_session);
  if (rc != SSH_OK)
  {
    cout << stderr << " Error connecting to host:" << ssh_get_error(my_ssh_session);
    exit(-1);
  }
  else if (rc == SSH_OK)
    cout << "Connection complete" << endl;;
  const char *password = "mypass";
  auth = ssh_userauth_password(my_ssh_session, NULL, password);
  if (auth != SSH_AUTH_SUCCESS) {
    cout << stderr << " Error to auth" << ssh_get_error(my_ssh_session);
  }
  if (auth == SSH_AUTH_SUCCESS) {
    cout << "Auth complete" << endl;
 }

Далее устанавливается канал для обмена данными и смена пользователя с root на postgres:

int postgres_log(ssh_session my_ssh_session) {
  ssh_channel channel;
  int rc;
  char buffer[256];
  int nbytes;
  channel = ssh_channel_new(my_ssh_session);
  if (channel == NULL)
    return SSH_ERROR;
  rc = ssh_channel_open_session(channel);
  if (rc != SSH_OK)
  {
    ssh_channel_free(channel);
    return rc;
  }
  rc = ssh_channel_request_exec(channel, "su - postgres");
  if (rc != SSH_OK) {
    ssh_channel_close(channel);
    ssh_channel_free(channel);
    return rc;
  }
}

Переключение проходит. Далее пытаюсь перейти на пользователя psql аналогичной функцией, только вместо

rc = ssh_channel_request_exec(channel, "su - postgres");

использую

rc = ssh_channel_request_exec(channel, "psql");

Но переключение не происходит. В этом вся проблема.

READ ALSO
Идентификатор не найден

Идентификатор не найден

Читал в одной книге, что если вам нужно делать одно действие несколько раз, то можно создать "void", в котором прописать это действие и вызывать...

506
RSA шифрование в QT C++

RSA шифрование в QT C++

Подскажите ссылки и примеры, где шифрование выполняется приватным ключом RSA, а дешифрование - публичным

332
Ошибка в коде в шаблоне функции

Ошибка в коде в шаблоне функции

Есть шаблон функции, который из НЕСКОЛЬКИХ массивов данных выбирает int petrol и считает среднее значение int petrolНапример

221