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