Как установить TCP/IP-соединение с базой данных PostgreSQL на удалённом сервере с операционной системой Ubuntu?

У меня есть удаленный сервер с операционной системой <b>Ubuntu</b>, к которому я подключаюсь с рабочего компьютера на <b>Windows</b> через <b>SSH</b> туннель. На этом сервере развернута база данных <b>PostgreSQL</b>. Я использую утилиту <b>HeidiSQL</b> для подключения к базе данных. Подключение через SSH проходит успешно, и я имею доступ ко всем данным в базе. Однако, когда я пытаюсь подключиться по протоколу TCP/IP, возникает ошибка. Как я могу решить эту проблему? <br/>
  • 12 ноября 2024 г. 13:43
Ответы на вопрос 2
Для успешного подключения к базе данных PostgreSQL на удалённом сервере с использованием TCP/IP необходимо убедиться в правильной настройке как сервера PostgreSQL, так и системы безопасности. Следуйте приведённым ниже шагам, чтобы решить вашу проблему:

### Шаг 1: Настройка PostgreSQL

1. **Проверьте конфигурацию PostgreSQL**: Откройте файл конфигурации PostgreSQL, который обычно находится по пути `/etc/postgresql/<версия>/main/postgresql.conf`. Найдите и убедитесь, что параметр `listen_addresses` установлен правильно.

   ```bash
   sudo nano /etc/postgresql/12/main/postgresql.conf
   ```

   Измените строку `listen_addresses` на:

   ```plaintext
   listen_addresses = '*'
   ```

   Это позволит PostgreSQL слушать входящие соединения на всех интерфейсах. Если вы хотите ограничить доступ только определённым IP-адресам, укажите их через запятую.

2. **Настройте доступ в pg_hba.conf**: Затем откройте файл `pg_hba.conf`, который находится в той же директории. Добавьте строку, которая позволяет подключение к базе данных:

   ```bash
   sudo nano /etc/postgresql/12/main/pg_hba.conf
   ```

   Добавьте следующую строку в конец файла:

   ```plaintext
   host    all             all             0.0.0.0/0            md5
   ```

   Это разрешит доступ всем пользователям с любого IP-адреса. Рекомендуется ограничить диапазон IP-адресов для повышения безопасности.

3. **Перезапустите PostgreSQL**: После внесения изменений необходимо перезапустить сервер PostgreSQL для применения новых настроек:

   ```bash
   sudo systemctl restart postgresql
   ```

### Шаг 2: Открытие порта в брандмауэре

Если на сервере включён брандмауэр (например, UFW), необходимо разрешить входящие соединения на порт PostgreSQL (по умолчанию 5432):

```bash
sudo ufw allow 5432/tcp
```

### Шаг 3: Подключение с использованием HeidiSQL

Теперь, когда база данных настроена на приём TCP/IP соединений, вы можете подключаться к ней с вашего Windows-компьютера:

1. В HeidiSQL создайте новое подключение.
2. В поле «Hostname / IP» укажите IP-адрес вашего сервера Ubuntu.
3. Убедитесь, что в полях «User» и «Password» указаны правильные учетные данные для доступа к базе данных.
4. При необходимости укажите базу данных, к которой вы хотите подключиться.

### Примечание о SSH-туннелировании

Если вы всё же хотите использовать SSH-туннель, убедитесь, что правильный порт (5432) перенаправляется через ваш SSH-клиент (например, PuTTY или встроенный OpenSSH в Windows). Примеры создания SSH-туннеля:

```bash
ssh -L 5432:localhost:5432 user@remote-server
```

После этого в HeidiSQL вы можете подключаться к `localhost` на порту `5432`.

### Заключение

Следуя указанным шагам, вы должны успешно настроить TCP/IP-соединение с базой данных PostgreSQL на удаленном сервере Ubuntu. Не забудьте иметь в виду безопасность вашего сервера и ограничивать доступ при необходимости.
При подключении к базе данных в самом Ubuntu через локальный хост все работает отлично.

А у юзера, с которыми ты заходишь есть права удаленного подключения? Возможно только localhost.
Похожие вопросы