#Как распознать проблему и когда применять инструкции
SSH-подключение установлено, но локальное приложение не может попасть в службу через туннель -L. Разделите проблемы локального прослушивания, запрета переадресации и адреса сервиса на стороне сервера. Уточните модель/сборку системы, наличие резервной копии и способ восстановить доступ, прежде чем применять действия.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Удалённый сервис не слушает адресНа сервере нет TCP-службы по заданному адресу или порту | Ошибка connect failed: Connection refused | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Локальный порт занятНа компьютере пользователя уже запущена программа на том же порту | bind: Address already in use | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Сервер запрещает переадресациюsshd ограничен AllowTcpForwarding/PermitOpen или Match | administratively prohibited | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
#Подробная проверка и безопасное решение
- Шаг 1. Уточните схему туннеляЗапишите три значения: локальный порт (например 15432), удалённый адрес сервиса со стороны SSH-сервера (например 127.0.0.1) и удалённый порт (например 5432). Доступ к службе возможен только с разрешения администратора.
- Шаг 2. Убедитесь, что удалённый сервис действительно доступенВ уже работающем SSH-сеансе на сервере выполните проверку TCP-порта. Здесь 5432 — пример PostgreSQL, не универсальное значение. Если порт закрыт, исправляют службу, а не SSH-туннель.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ss -ltn | grep ":5432"
- Шаг 3. Проверьте, свободен ли локальный портНа своём компьютере Linux/macOS в терминале посмотрите занятый порт 15432. Если он уже занят, выберите другой локальный порт; не останавливайте незнакомое приложение.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
lsof -nP -iTCP:15432 -sTCP:LISTEN
- Шаг 4. Создайте туннель с немедленной проверкой ошибокОткройте новый терминал клиента и выполните команду; -N не запускает удалённую команду, -L задаёт схему локальный:удалённый:порт, ExitOnForwardFailure откажет при ошибке запуска прослушивания. Терминал оставьте открытым.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh -v -N -o ExitOnForwardFailure=yes -L 127.0.0.1:15432:127.0.0.1:5432 user@server.example.org
- Шаг 5. Проверьте локальное прослушиваниеВо втором окне терминала клиента убедитесь, что 127.0.0.1:15432 занят SSH. Если нет, посмотрите вывод первого окна на bind failed. Затем подключайте приложение к 127.0.0.1:15432, а не к исходному серверному порту.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
lsof -nP -iTCP:15432 -sTCP:LISTEN
- Шаг 6. Разберите сообщение о запрете переадресацииЕсли после обращения клиента SSH пишет administratively prohibited, администратор должен проверить на сервере AllowTcpForwarding, PermitOpen и блоки Match; изменять sshd_config наугад запрещено. Смена клиентского флага не обходит запрет.
- Шаг 7. Проверьте реальный обмен и корректно закройте туннельВ тестовом клиенте базы/приложении выполните безвредный запрос чтения, убедитесь в ответе. Для завершения вернитесь в окно SSH и нажмите Ctrl+C; штатные соединения других пользователей не затрагиваются.
#Как проверить результат и что делать, если не помогло
Порт 15432 слушается процессом SSH, приложение получает ожидаемый ответ и соединение прекращается по Ctrl+C. При ошибке удалённого сервиса туннель может быть установлен, но не передавать данные. Если симптомы не исчезли, сохраните точное сообщение об ошибке и выполненные проверки; не повторяйте опасные процедуры циклически.