• Как подключиться к БД PostgreSQL из приложения на C++ через libssh?

    @Vsviridov90 Автор вопроса
    Станислав Макаров, на аккаунт postgres получается перейти, а на пользователей psql - нет.
  • Как подключиться к БД PostgreSQL из приложения на C++ через libssh?

    @Vsviridov90 Автор вопроса
    В том и дело, что ошибок нет. SSH туннель устанавливается нормально, запускается сессия.
    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;
        }
    }


    После этого аналогичной функцией, только вместо rc = ssh_channel_request_exec(channel, "postgres") ставлю rc = ssh_channel_request_exec(channel, "psql"); пытаюсь перейти в аккаунт psql для управления БД.

    Если создать другого пользователя и к нему БД, то подключение тоже не проходит.