Я пытаюсь подключиться через графический интерфейс pgAdmin3 к базе данных Postgresql на удаленном сервере myHost на порту 5432.

Сторона сервера:

  • У меня есть Unix myUser, который соответствует роли postgresql.
  • pg_hba.conf:
    local all all trust
    host all all 127.0.0.1/32 trust

Сторона клиента :

  • Я открываю туннель ssh: ssh -L 3333: myHost: 5432 myUser @ myHost
  • Я подключаюсь к серверу через pgAdmin3 (или через psql -h localhost -p 3333).

Я получаю следующее сообщение об ошибке:
сервер неожиданно закрыл соединение. Это, вероятно, означает, что сервер аварийно завершил работу до или во время обработки запроса.

Я попытался получить доступ к конкретной базе данных с ролью суперпользователя, используя psql -h localhost -p 3333 --dbname = myDB --user = mySuperUser, но безуспешно.

Что я забыл в настройке?
Спасибо

answer

Убедитесь, что удаленный хост разрешает туннелирование. Вы можете проверить с клиентом, отклонен ли туннель, с помощью:

ssh -v -L 3333:myHost:5432 [email protected]

В моем случае проблема заключалась в том, что туннель заканчивался адресом IPv6:

ssh -L 5434:localhost:5432 [email protected]

Достаточно было заменить localhost на адрес, который, как я предполагал, использовался ранее:

ssh -L 5434:127.0.0.1:5432 [email protected]

15 минут моей жизни на ветер. :) Надеюсь, это сэкономит чужое время ...

Если кто-то все еще ищет решение:

Попробуйте установить в / etc / ssh / sshd_config:

AllowTcpForwarding yes
GatewayPorts yes

тогда:

service sshd restart

Похоже, вам нужно добавить разрешения для вашего пользователя для доступа к postgresql нелокально.

Я знаю, кажется, что, создавая туннель, вы подключаетесь локально, но вы, вероятно, не получаете к нему доступ через loopback / localhost.

Вероятно, вам нужно добавить строку в pg_hba.cong, я бы привел пример, но я на своем телефоне, извините

Убедитесь, что вы на самом деле не подключаетесь к локальному экземпляру Postgres, который прослушивает тот же порт, что и тот, который вы выбрали для локального конца туннеля.

Если локальный порт используется, sshбудет выведено сообщение об ошибке и настройка туннеля пропущена. Но он все равно будет подключаться к удаленному серверу, что может привести к тому, что ошибка будет прокручиваться за пределы экрана. Поскольку вы можете подключиться, вы не подозреваете, что с туннелем что-то не так, пока вы, в качестве последнего средства, полностью не остановите удаленный Postgres и не обнаружите, что вы все еще можете подключиться.

Не спрашивайте меня, откуда я это знаю.