September 7, 2010

Локально работаем с PostgreSQL закрытом на сервере

Уже не в первый раз мне задают такой вопрос.

Как подключиться, например с помощью pgAdmin, к кластеру PostgreSQL, когда он где-то на сервере, где его порт доступен только локально, т.е. к нему закрыт доступ извне? При этом есть ssh на этот сервер, но по нему работать в консоли с psql и тестировать работающее с базой приложение очень не удобно.

Всё очень просто - нам поможет старый добрый ssh-туннелинг. Допустим есть сервер servername где на локальном порту 5432 крутится PostgreSQL, и есть пользователь username, который может ходить по ssh на этот сервер. Надо сделать так чтобы обращаясь к локальному порту 5432 на вашей рабочей машине вы фактически попадали на локальный порт 5432 нашего сервера.

Если вы на Windows, то смотрите в сторону утилиты PuTTY, я в своё время на ней такое делал. Если вы на Linux, как и я сейчас, то вам нужна такая комманда:

ssh -L 5432:localhost:5432 username@servername

У меня, кстати, несколько серверов пробрасываются на разные локальные порты на рабочей машине:

ssh -L 5432:localhost:5432 gray@server1
ssh -L 6432:localhost:5432 gray@server2
ssh -L 7432:localhost:5432 gray@server3


Очень удобно.

p.s. Ещё одна полезная ссылка, где рассказывается как пользоваться ssh по сертификату, т.е. без надобности вводить каждый раз пароль.

3 comments:

Artyom Nosov said...

Я бы порекомендовал использовать следующую команду:
ssh -f -N -L 5432:localhost:5432 gray@server1

Команда автоматически уходит в background соответственно не требуется держать открытым терминал.

gray_hemp said...

Да, спасибо за дополнение. Я предпочитаю держать терминал открытым, т.к. в основном работаю удалённо (не по локальной сети) и связь не всегда стабильна, т.ч. ssh часто подвисает. Такие ситуации удобно отслеживать с открытым терминалом.

Artur Makowka said...
This comment has been removed by a blog administrator.

Post a Comment