Задать вопрос
@HungryOleg

Как подключиться по TCP/IP к базе данных PostgreSQL на удаленном Ubuntu сервере?

Есть удаленный сервер Ubuntu к которому я подключаюсь с рабочего компьютера на Windows через SSH туннель. На сервере развернута база данных PostgreSQL. Для подключения к базе данных использую утилиту HeidiSQL. При подключении к базе данных через SSH все проходит отлично, имею доступ ко всем данным в базе, но при попытках подключение по TCP/IP ничего не выходит и выдает ошибку:
6733500939a21714061870.png
Ту же самую ошибку выдает и python, если пытаюсь подключаться через него.

Вот некоторые команды исполненные с рабочего компьютера на Windows:

ping {ip сервера}
Обмен пакетами с {ip сервера} по с 32 байтами данных:
Ответ от {ip сервера}: число байт=32 время=16мс TTL=49
Ответ от {ip сервера}: число байт=32 время=6мс TTL=49
Ответ от {ip сервера}: число байт=32 время=10мс TTL=49
Ответ от {ip сервера}: число байт=32 время=13мс TTL=49

Статистика Ping для {ip сервера}:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 6мсек, Максимальное = 16 мсек, Среднее = 11 мсек

telnet {ip сервера} 5432
<Выдает пустой экран>

Вот некоторые команды исполненные на сервере Ubuntu:

ping {ip рабочего компьютера}
PING {ip рабочего компьютера} ({ip рабочего компьютера}) 56(84) bytes of data.
64 bytes from {ip рабочего компьютера}: icmp_seq=1 ttl=53 time=73.5 ms
64 bytes from {ip рабочего компьютера}: icmp_seq=2 ttl=53 time=71.5 ms
64 bytes from {ip рабочего компьютера}: icmp_seq=3 ttl=53 time=71.5 ms
64 bytes from {ip рабочего компьютера}: icmp_seq=4 ttl=53 time=71.4 ms
^C
--- {ip рабочего компьютера} ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 71.372/71.970/73.485/0.876 ms

telnet {ip рабочего компьютера} 5432
Trying {ip рабочего компьютера}...
telnet: Unable to connect to remote host: Connection timed out

Фаервол ufw на сервере Ubuntu был отключен, включал его и прописывал ему порты, вот такой статус получается:
sudo ufw status
Status: active

To Action From
-- ------ ----
5000 ALLOW Anywhere
5432/tcp ALLOW Anywhere
Anywhere ALLOW {ip рабочего компьютера}
22 ALLOW Anywhere
5432 ALLOW Anywhere
55525 ALLOW Anywhere
Anywhere ALLOW {другой ip}
55525 ALLOW {ip рабочего компьютера}
5000 (v6) ALLOW Anywhere (v6)
5432/tcp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
5432 (v6) ALLOW Anywhere (v6)
55525 (v6) ALLOW Anywhere (v6)

Также на сервере прописывал команду sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
Вот статус самой базы данных PostgreSQL:

sudo tail -f /var/log/postgresql/postgresql-12-main.log
2024-11-12 13:21:21.312 UTC [1872] LOG: aborting any active transactions
2024-11-12 13:21:21.317 UTC [1872] LOG: background worker "logical replication launcher" (PID 1879) exited with exit code 1
2024-11-12 13:21:21.317 UTC [1874] LOG: shutting down
2024-11-12 13:21:21.330 UTC [1872] LOG: database system is shut down
2024-11-12 13:21:21.509 UTC [5727] LOG: starting PostgreSQL 12.20 (Ubuntu 12.20-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, 64-bit
2024-11-12 13:21:21.509 UTC [5727] LOG: listening on IPv4 address "0.0.0.0", port 5432
2024-11-12 13:21:21.509 UTC [5727] LOG: listening on IPv6 address "::", port 5432
2024-11-12 13:21:21.510 UTC [5727] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-11-12 13:21:21.530 UTC [5728] LOG: database system was shut down at 2024-11-12 13:21:21 UTC
2024-11-12 13:21:21.536 UTC [5727] LOG: database system is ready to accept connections

sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2024-11-12 13:21:23 UTC; 2min 11s ago
Process: 5745 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 5745 (code=exited, status=0/SUCCESS)

Nov 12 13:21:23 BI systemd[1]: Starting PostgreSQL RDBMS...
Nov 12 13:21:23 BI systemd[1]: Finished PostgreSQL RDBMS.

В файле /etc/postgresql/12/main/postgresql.conf прописано:
listen_addresses = '*'
port = 5432

В файле /etc/postgresql/12/main/pg_hba.conf прописано:
# Database administrative login by Unix domain socket
host all all 0.0.0.0/0 md5
host all all ::/0 md5
local all postgres peer

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
host all all all md5

При подключении к базе данных в самом Ubuntu через локальный хост все работает отлично.
  • Вопрос задан
  • 225 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.
Я так понимаю, на удалённом сервере просто порт не открыт наружу.
И не надо его открывать, ходи через ssh-туннель.
А то найдутся злые дяди, напихают тебе дилдо в базу - полную панамку...
Не хочешь ssh - подними на сервере VPN (pptp/l2tp), расшарь порт и ходи через него.
Ответ написан
Комментировать
@AlexVWill
sudo netstat -tulpn | grep postgres
Что выдает?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы