5

Вопрос: Почему ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> приводит к ошибке "Переадресация удаленного порта для прослушивающего порта"? Цель состоит в том, чтобы установить обратный туннель с переадресацией портов, чтобы последовательно подключаться по ssh к хосту за маршрутизатором NAT, который имеет динамический частный IP. Смотрите изображение для деталей.

Уже пробовал:

  1. Исследовал существующую литературу по Google, Stackoverflow и т.д. Существуют темы, относящиеся к этому сообщению об ошибке, однако указанные разрешения разрешают коренные причины, отличные от указанных в данном конкретном случае, поскольку эти разрешения не устраняют ошибку в этом случае.
  2. Я выполнил несколько диагностик, чтобы проверить, открыты ли необходимые порты. Некоторые из этих результатов показаны на рисунке ниже.

Обратный туннель SSH

Изображение 1

Обновить

Я пытался выполнить следующую команду для шага 2:reduser@redhost:~ ssh greenuser@greenhost -p 2222

Это должно быть:reduser@redhost:~ ssh greenuser@bluehost -p 2222 Вы хотите использовать учетные данные greenuser на bluehost IP, потому что хост, на который вы входите при использовании порта 2222, действительно является greenhost.

2 ответа2

11

Почему ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> приводит к ошибке "Переадресация удаленного порта для прослушивающего порта"?

Я получаю это точное предупреждение, когда пытаюсь использовать порт, уже занятый на удаленной стороне.

Вывод netstat из bluehost указывает, что что-то там уже прослушивается через порт 2222 . Это не показывает, что это такое.

Решения:

  1. Измените 2222 в вашем вызове ssh на другой порт, который не используется на bluehost . Просто сделайте его больше 1023 потому что обычные пользователи не могут связываться с известными портами ; в противном случае вы получите одно и то же предупреждение независимо от того, используется порт или нет.
  2. Или идентифицируйте процесс прослушивания (на bluehost) с помощью sudo lsof -i TCP:2222 ; прекратить или перенастроить его, чтобы сделать порт 2222 доступным.

Редактировать:

В вашем случае эта часть man ssh кажется важной:

-R [bind_address:]port:host:hostport
-R [bind_address:]port:local_socket
-R remote_socket:host:hostport
-R remote_socket:local_socket

[…] По умолчанию прослушивающие сокеты TCP на сервере будут привязаны только к интерфейсу обратной связи. Это можно переопределить, указав bind_address . Пустой bind_address или адрес « * » указывает, что удаленный сокет должен прослушивать все интерфейсы. Указание удаленного bind_address будет успешным, только если включена опция GatewayPorts на сервере (см. sshd_config(5)).

Это означает, что у вас должен быть GatewayPorts yes в sshd_config на bluehost . Прочитайте man 5 sshd_config чтобы узнать больше. Не забудьте перезагрузить сервис после этого.

3

Убедитесь, что нет соединения с портом 2222 на bluehost. Проверьте в bluehost lsof -t -i:2222 ли какой-либо идентификатор процесса порт 2222. Кроме того, завершите этот процесс (например, с помощью kill $(lsof -t -i:2222)).

Это решило проблему для меня. Надеюсь, эта информация будет полезна для кого-то еще. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .