Найти, почему не работает ssh туннель
У меня есть удаленный сервер, который я могу SSH без проблем. У меня PostgreSQL (ps) настроен на удаленном сервере (называемом "enc") и на локальной машине, оба работают на 5432 (по умолчанию). Удаленный сервер не разрешает подключения извне (локальный веб-сервер подключается непосредственно к нему).
Я пытаюсь настроить SSH-туннель, чтобы упростить выполнение команд на удаленном сервере PS, а не копировать файлы, входить на сервер и запускать их вручную с этой стороны.
Я попытался выполнить следующую команду
ssh -N -L 5555:enc:5432 enc
Туннель, кажется, настроен правильно, но когда я пытаюсь подключиться к удаленной машине с
psql -p 5555
это говорит, что это не работает
psql: could not connect to server: No such file or directory. Is the server running locally and accepting connections on Unix domain socket "/run/postgresql/.s.PGSQL.5555"?
Вероятно, это проблема с настройками в туннеле или ограничением прав доступа пользователя (я полагаю, что ошибка была бы другой, если бы это было так)?
3 ответа
Оказывается, проблема была в том, что дальше. Туннель работает правильно, однако, пытаясь соединиться с postgres, вы должны передать -h (даже для localhost), в противном случае он попытается соединиться через сокет unix (который находится прямо там в ошибке), а не через tcp (который это единственный способ, которым он будет работать с туннелем).
Попробуй это:
ssh -N -L 5555:enc:5432 localhost
а потом
lsof -i :5555
Если вы ничего не видите, ваша локальная машина ничего не слушает.
Тип
netstat -anp | grep LISTEN | grep "port_number"
на вашем сервере и найдите IP-адрес, по которому работает служба.
Если это ip-адрес компьютера, вы должны указать его в команде ssh -L, в противном случае, если это адрес обратной связи (127.0.0.1 - ipv4 или::1 - ipv6), укажите это в команде.