У меня есть сервер 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
удаленного хоста, который предположительно находится там, где БД ожидает подключения.