PhpStorm ssh-туннель к удаленному серверу - что-нибудь настроить на удаленном сервере?

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

У меня есть PhpStorm 9.0.2 на моем компьютере с Windows 8.1, я пытаюсь использовать PuTTY для подключения к удаленному компьютеру CentOS 6, PHP 5.6 / xdebug 2.3.2 в другом месте. Я нахожусь за брандмауэром, но я не думаю, что это проблема, поскольку я могу без проблем подключиться по SSH, поэтому туннель должен работать, если я могу просто правильно его настроить. Думаю, единственная проблема в том, что я слишком туп, чтобы понять, как правильно туннелировать.

Как xdebug удаленного сервера знает, что нужно туннелировать? Или это нужно знать? Мне нужно сообщить этому серверу о туннеле? Или он уже знает об этом, как только я подключаюсь через туннель? Но если знает, почему xdebug не может подключиться к порту 9000? Слушает ли мой PhpStorm порт 9000, а мой PuTTY обрабатывает отправку данных туда? Или PhpStorm нужно прослушивать порт 22?

В этом руководстве я обнаружил, что объясняет как использовать PhpStorm с удаленным сервером через SSH-туннель не работает (щелкните, чтобы развернуть раздел «Настройка SSH-туннеля в Windows»). Xdebug на моем удаленном тестовом сервере, Linux-машине CentOS, на которой находится мой веб-сайт разработки на основе PHP / MySQL сижу, не могу подключиться к моей локальной машине разработки Windows 8.1 через порт 9000.

Я не совсем понимаю туннелирование, и, возможно, никогда не пойму, поскольку я потратил несколько часов на его изучение, но еще не понял. Я просто хочу отладить свое приложение. :(

В учебном пособии вы найдете инструкции по использованию Putty для открытия SSH-соединения с удаленным сервером и настройки раздела «туннели» соединения, чтобы указать порт 9000 на удаленном хосте и localhost:9000 для вашей локальной машины разработки. Я делал это снова и снова, но кажется, что никто не сказал моему удаленному серверу, что делать.

Вот мои настройки шпатлевки:

Конфигурация PuTTY 1 (поддельный IP-адрес)  Конфигурация PuTTY 2 - ТУННЕЛЬ

Журнал XDebug продолжает показывать, что не удалось подключиться.

I: Checking remote connect back address.
I: Remote address found, connecting to 173.12.34.123:9000.
E: Time-out connecting to client. :-(
Log closed at 2015-10-28 19:31:55

Как я могу узнать, пытается ли мой удаленный XDebug установить прямое соединение с моим сервером через порт 9000 или он использует tunnel через порт 22?

Имеет ли значение, к какому пользователю я подключаюсь через SSH? root или какой-нибудь другой пользователь? Имеет ли значение, если у меня есть еще один сеанс SSH, подключенный к тому же серверу в то же время, который не туннелирован?

РЕДАКТИРОВАТЬ: Вот мои настройки xdebug, полученные от phpinfo(). Они отражают php.ini из корня моего текущего веб-сайта (/home/testingsite/public_html/php.ini). Обратите внимание, что xdebug.remote_log сохраняется в /home/testingsite/public_html/var/xdebug/log.txt

xdebug

xdebug support  enabled
Version 2.3.2
IDE Key PHPSTORM

Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $

Directive   Local Value Master Value
xdebug.auto_trace   Off Off
xdebug.cli_color    0   0
xdebug.collect_assignments  Off Off
xdebug.collect_includes On  On
xdebug.collect_params   0   0
xdebug.collect_return   Off Off
xdebug.collect_vars Off Off
xdebug.coverage_enable  On  On
xdebug.default_enable   On  On
xdebug.dump.COOKIE  no value    no value
xdebug.dump.ENV no value    no value
xdebug.dump.FILES   no value    no value
xdebug.dump.GET no value    no value
xdebug.dump.POST    no value    no value
xdebug.dump.REQUEST no value    no value
xdebug.dump.SERVER  no value    no value
xdebug.dump.SESSION no value    no value
xdebug.dump_globals On  On
xdebug.dump_once    On  On
xdebug.dump_undefined   Off Off
xdebug.extended_info    On  On
xdebug.file_link_format no value    no value
xdebug.force_display_errors Off Off
xdebug.force_error_reporting    0   0
xdebug.halt_level   0   0
xdebug.idekey   PHPSTORM    PHPSTORM
xdebug.max_nesting_level    256 256
xdebug.max_stack_frames -1  -1
xdebug.overload_var_dump    On  On
xdebug.profiler_aggregate   Off Off
xdebug.profiler_append  Off Off
xdebug.profiler_enable  On  On
xdebug.profiler_enable_trigger  On  On
xdebug.profiler_enable_trigger_value    no value    no value
xdebug.profiler_output_dir  var/xdebug/profiles/    var/xdebug/profiles/
xdebug.profiler_output_name cachegrind.out.%p   cachegrind.out.%p
xdebug.remote_autostart Off Off
xdebug.remote_connect_back  On  On
xdebug.remote_cookie_expire_time    3600    3600
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  localhost   localhost
xdebug.remote_log   var/xdebug/log.txt  var/xdebug/log.txt
xdebug.remote_mode  req req
xdebug.remote_port  9000    9000
xdebug.scream   Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars  On  On
xdebug.show_mem_delta   Off Off
xdebug.trace_enable_trigger Off Off
xdebug.trace_enable_trigger_value   no value    no value
xdebug.trace_format 0   0
xdebug.trace_options    0   0
xdebug.trace_output_dir /tmp    /tmp
xdebug.trace_output_name    trace.%c    trace.%c
xdebug.var_display_max_children 128 128
xdebug.var_display_max_data 512 512
xdebug.var_display_max_depth    3   3

person Buttle Butkus    schedule 28.10.2015    source источник
comment
Попробуйте этот учебник (хотя он должен быть похож на тот, который вы пробовали) - derickrethans .nl / debugging-with-xdebug-and-firewalls.html   -  person LazyOne    schedule 28.10.2015
comment
Но перед этим: покажите, пожалуйста, вашу конфигурацию xdebug. В настоящее время у вас, скорее всего, есть ошибка в конфигурации xdebug, а не в SSH (по крайней мере, журнал xdebug предполагает это).   -  person LazyOne    schedule 28.10.2015
comment
@LazyOne Вы подняли еще одну проблему, которая у меня есть. У меня есть php.ini в корне моего веб-сайта. Однако, когда я просмотрел там phpinfo(), он показал глобальные настройки. Хотя (некоторые?) Локальные настройки работали, потому что xdebug_remote_log записывался, как указано. Я только что перезапустил apache, и теперь локальные настройки отображаются в phpinfo() выводе. Я отправлю их в свой вопрос.   -  person Buttle Butkus    schedule 28.10.2015
comment
@LazyOne, я только что добавил свой phpinfo() вывод. Он плохо отформатирован. Я мог бы сделать снимок экрана и вставить его, если вы думаете, что так лучше. И Xdebug определенно пытается подключиться обратно к моему IP-адресу через порт 9000, судя по журналу.   -  person Buttle Butkus    schedule 28.10.2015
comment
Пожалуйста, отключите xdebug.remote_connect_back (должно быть 0 или off), чтобы вы работали. При SSH-туннелировании xdebug должен подключаться к локальному порту TCP 9000, а не к удаленному.   -  person LazyOne    schedule 28.10.2015
comment
@LazyOne, хорошо, отключите remote_connect_back и используйте xdebug.remote_host=localhost? О, МОЙ БОГ, ЭТО РАБОТАЕТ! И теперь я вижу, что в том самом туториале, на который я ссылался, было localhost, и я чувствую себя идиотом, но я так счастлив! Спасибо!   -  person Buttle Butkus    schedule 28.10.2015
comment
Таким образом, при использовании туннеля удаленный сервер подключается к localhost:9000, и именно здесь туннель начинается. Я знал, что на сервере должна быть какая-то директива. Я уверен, что пробовал localhost и раньше, но в тот момент мне, вероятно, не хватало некоторых других вещей. Теперь все работает. Это действительно потрясающе. Большое спасибо.   -  person Buttle Butkus    schedule 28.10.2015


Ответы (2)


Согласно вашему журналу xdebug, у вас есть ошибка в настройках, а не в SSH.

Основываясь на вашем разделе xdebug в phpinfo() out, вам нужно установить xdebug.remote_connect_back = 0 (или off - то же значение). Также убедитесь, что xdebug.remote_host = localhost.

С вашими текущими настройками xdebug пытается подключиться обратно к TCP 9000 по IP, откуда пришел запрос, в то время как для работы SSH-туннелирования вам нужно, чтобы он подключился к локальному TCP 9000 (и SSH будет туннелировать такое соединение обратно на ваш локальный компьютер, минуя брандмауэр / маршрутизатор. ).

person LazyOne    schedule 28.10.2015
comment
Вы абсолютно правы. Мне все еще любопытно узнать, есть ли простой способ проверить, работает ли туннель, на моем клиенте Windows 8.1 или на удаленном хосте CentOS. Если бы я только мог быть уверен, что туннель работает, я мог бы перестать беспокоиться об этом и, может быть, более внимательно посмотрел на свою конфигурацию. Но я так рад, что теперь он работает. Я уже с удовольствием отлаживаю код вместо отладки отладки. - person Buttle Butkus; 29.10.2015
comment
Что ж ... попробуйте подключиться к целевому компьютеру через telnet: (telnet open 127.0.0.1 9000 - что-то в этом роде). Если в соединении отказано, то либо: 1) SSH-туннель не работает / не был настроен правильно, либо 2) никто не слушает этот порт на конечном компьютере (для PhpStorm это означает, что у вас должен быть активирован значок ручки телефона). Что касается только проверки SSH-туннеля - вообще не уверен (я в этом ни в коем случае не разбираюсь). - person LazyOne; 29.10.2015
comment
Ах, хорошо, так что telnet с удаленной машины, чтобы увидеть, проходит ли порт 9000. Я понял. Возможно, вы не являетесь экспертом, но вы мне очень помогли. Об удаленной отладке мечтаю с середины июня. - person Buttle Butkus; 29.10.2015

У меня возникла проблема при попытке использовать PhpStorm для выполнения xdebug на AWS EC2. В частности, я пытался запускать скрипты через ssh-туннель, не задавая никаких настроек http-сервера.

Я не знаю, будет ли PHPStorm проверять настройки http-сервера, но с настроенным туннелем ssh он, похоже, пытается установить соединение xdebug с адресом EC2. Проблема в том, что когда XDebug пытается снова подключиться к моей машине, мой PhpStorm работает через NAT за брандмауэром. Не имея доступа к настройке переадресации портов здесь, на работе, я был в тупике.

Но я нашел неприятный обходной путь, который чем-то похож на PitB. Но это работает.

Если вам нужно просто запустить оболочку / cli php-кода на удаленном ssh-туннеле, в дополнение к настройке перенаправления портов на порт 9000 (или 9001, или что-то еще, что вы используете) где-то, установите это соединение также на туннельный порт 22 другим способом. . ПРИМЕЧАНИЕ: это настраивается вне phpstorm, например, с помощью постоянного туннеля ssh или, что я делаю, это открываю оболочку в окне xterm и запускаю на нем tmux, чтобы часы на панели инструментов поддерживали соединение.

e.g.:

ssh 9001:localhost:9001 -L 10022:localhost:22 awsec2.host.address

Теперь вы настроили свой ssh-туннель (в настройках интерпретатора PhpStorm) для использования этого порта ssh 10022 на 127.0.0.1 (localhost) вместо порта 22 на удаленном адресе, а затем PhpStorm также будет использовать 127.0.0.1, когда он попытается подключитесь к порту 9001, в результате оба будут проходить через ваш туннель.

В ~ / .ssh / config настройки выглядят следующим образом:

host myawsec2
    Hostname awsec2.host.address
    User myuser
    TCPKeepAlive yes
    ForwardX11 yes
    ForwardX11Trusted yes
    LocalForward 10022 localhost:22
    RemoteForward 9001 localhost:9001
person Scott    schedule 12.08.2020
comment
Кстати, следует отметить, что вышеупомянутый метод также работает в туннелях ssh, перенаправляемых ProxyCommand. (где подключиться к удаленному ssh за брандмауэром или nat, вы должны сначала подключиться к другому ssh-серверу с открытым портом) - person Scott; 13.08.2020
comment
это также может быть удобно тем, что если вы измените место назначения туннеля (на другой конец удаленного сервера с аналогичной конфигурацией / файлами), это не потребует изменения каких-либо настроек в phpstorm - person Scott; 13.08.2020