Объясните процесс и ограничения SSH-туннелирования (для удаленного сеанса Xdebug)

Преамбула

Я запускаю свой локальный SSH-терминал на работе за брандмауэром и постоянно подключаюсь к удаленному серверу без каких-либо проблем.

Xdebug работает, поправьте меня, если я ошибаюсь, заключается в том, что он отправляет «незапрашиваемый» запрос на мой сетевой порт 9000. Я фактически инициировал это действие, отправив удаленному серверу HTTP-запрос через свой браузер с помощью POST / GET / Переменная COOKIE, указывающая xdebug на запуск. Но моя сеть этого не знает. Все, что он знает, это то, что он получает запрос на порт 9000 из Интернета. Он не знает, на какой компьютер в своей частной сети пересылать его (без настройки переадресации портов на маршрутизаторе), и может только игнорировать запрос.

Так что, если вы не можете выполнить переадресацию портов, другой вариант (и, насколько я могу судить, намного лучше) - это SSH-туннелирование. Мой компьютер отправляет запрос SSH, сервер отвечает. Мой маршрутизатор знает, на какой компьютер в своей сети направлять эти ответы. Использование этого SSH-соединения позволяет этим «незапрошенным» запросам порта 9000 от удаленного сервера добраться до меня.

Думаю, я это понимаю.

Наконец-то я получил возможность работать с туннелированием благодаря stackoverflow, но мне все еще неясно, как это работает.

На удаленном сервере я говорю Xdebug подключиться к localhost (не к моему ip через xdebug.remote_host=173.123.45.56, и не к xdebug.remote_connect_back=1, который также окажется на моем IP) на порту 9000 . Подключение к localhost кажется немного странным, поскольку я представляю это как сервер, отправляющий сообщения на свой собственный IP-адрес, как если бы он отправлял сообщения самому себе (но я думаю, что подключение к localhost, вероятно, принципиально отличается от подключения к любому другому IP-адресу. ... Я не думаю, что сообщение будет перенаправлено и обратно на localhost).

На своем компьютере на работе я открываю SSH-соединение через порт 22, указывая туннель к / на порт 9000 и удаленный порт 9000. Я видел здесь некоторые объяснения различных настроек, но все еще не понимаю их. В некоторых даже задействовано три машины. Кажется, что происходит то, что я подключаюсь, как обычно, через порт 22, но я сказал удаленной машине, что хочу получать сообщения через порт 9000. Я указал "localhost" в своем туннеле, и я полагаю, что это должно соответствовать localhost в моем значении xdebug.remote_host. Интересно, если бы я указал свой IP-адрес в обоих местах (т.е. xdebug.remote_host=173.123.45.56 на удаленном сервере и тот же IP-адрес в моем SSH-терминале), это тоже сработало бы?

Итак, Xdebug на удаленном сервере отправляет мне запрос на запуск сеанса отладки. Он поступает через мой порт 22, но мой SSH-туннель каким-то образом создает впечатление, что он поступает на порт 9000. Итак, моя IDE, которая прослушивает порт 9000, получает запрос и отправляет ответ (также на 9000), который мой SSH-туннель каким-то образом перехватывает и отправляет обратно на удаленный сервер через порт 22, где он аналогичным образом подделывается и выглядит как порт 9000 для xdebug.

Суть

Так что я действительно не понимаю, что именно означает localhost в моей конфигурации туннеля SSH? Относится ли это непосредственно к значению xdebug.remote_host=localhost? Могу ли я изменить их оба на свой IP-адрес?

Все исходящие сообщения удаленного сервера через порт 9000 пересылаются мне или только некоторые из них? Например, если кто-то в Чаттануге инициирует сеанс отладки в своем браузере, получу ли я ответ Xdebug?

Все ли мои исходящие сообщения через порт 9000 перенаправляются на этот сервер? Т.е. Могу ли я одновременно отлаживать два приложения на двух разных серверах, при этом некоторые из моих коммуникаций через порт 9000 идут в одну сторону, а некоторые - в другую, или мне понадобится один порт для каждого локального приложения? (Я могу использовать браузеры Google Chrome и Firefox одновременно, например, оба через порт 80.)


person Buttle Butkus    schedule 29.10.2015    source источник


Ответы (1)


Туннель состоит из SSHD, прослушивающего порт 9000 (а также 22) на вашем конце, и SSHD, прослушивающего порт 22 на другом конце. Когда вы подключаете свой XDebug к локальному 9000, SSHD взаимодействуют между собой, а удаленный SSHD подключается к порту 9000 на удаленном компьютере. После этого ваш локальный порт 9000 ведет себя идентично удаленному порту 9000: все данные, записанные на любой конец, появляются на другом конце.

person user207421    schedule 21.11.2015