Назад | Перейти на главную страницу

Почему графический клиент PGSQL может подключаться через туннель SSH, а не я?

У меня есть сервер PostgreSQL, который разрешает только локальное соединение.

Я использую «Navicat for PostgreSQL Lite» для выполнения некоторых административных операций. В этом клиенте я настроил SSH-туннель на свой сервер. Все нормально работает.

Сегодня я хотел использовать другого клиента, который не позволяет мне настраивать туннель SSH внутри. Итак, я попытался открыть SSH-туннель вручную:

ssh -L 15021:myserver.com:5432 me@myserver.com

Но когда я пытался использовать его с клиентом, он говорит, что в соединении отказано. В командной строке SSH я получил это сообщение.

channel 3: open failed: connect failed: Connection refused

Я попытался

psql -h localhost -p 15021 db_name

Та же ошибка ...

Я не понимаю, какие волшебные вещи делает Navicat, чего не делаю я с моим ручным SSH-туннелированием. Я почти уверен, что PostgreSQL прослушивает порт 5432.

Спасибо за любой указатель или ответ.

РЕДАКТИРОВАТЬ:

Это журнал попыток с LogLevel DEBUG. Я анонимизировал имя хоста.

Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: ctype direct-tcpip rchan 3 win 2097152 max 32768
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_request_direct_tcpip: originator ::1 port 64027, target myserver.com port 5432
Sep 13 14:57:23 myserver sshd[27793]: debug1: connect_next: host myserver.com ([xxx.xx.xx.xxx]:5432) in progress, fd=9
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: new [direct-tcpip]
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: confirm direct-tcpip
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: connection failed: Connection refused
Sep 13 14:57:23 myserver sshd[27793]: error: connect_to myserver.com port 5432: failed.
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: free: direct-tcpip, nchannels 2

ssh -L 15021: myserver.com: 5432 me@myserver.com

Это не типичный способ создания туннеля, потому что он запрашивает удаленный SSH-сервер подключиться к PostgreSQL через его общедоступный IP-адрес (myserver.com)

Это ведет к Connection refused потому что postgres не слушает его публичный адрес. Это обычный случай по умолчанию.

Вы, наверное, хотели сделать:

 ssh -L 15021:localhost:5432 me@myserver.com

в этом случае SSH будет маршрутизировать соединения db из ваш localhost:15021 к localhost:5432 удаленного хоста, который предположительно находится там, где БД ожидает подключения.