У меня есть удаленный ресурс (веб-приложение), который я должен туннелировать на сервер для удаленного доступа. Я могу выполнить команду перенаправления локального порта, используя -L а затем получить доступ к удаленному ресурсу через localhost:port в моем браузере.

Для простоты и постоянства я хотел бы подключиться к удаленному хосту (используя SSH с моим ключом), но обслуживать веб-страницу локально, чтобы я мог получить к ней доступ с разных компьютеров в локальной сети.

Например:

Old way:
Remote-server  --|SSH_Tunnel|--  Local-host:port

New way:
Remote-server  --|SSH_Tunnel|--  Local-host:port || local-net:port == local_http-traffic == different-local-computer

1 ответ1

1

Т.Л., др? Используйте ssh -g …


Я предполагаю, что команда, которую вы используете, похожа

ssh -L 1234:server:5678 ssh_server

Это будет прослушивать 127.0.0.1:1234 (IPv4) и [::1]:1234 (IPv6) на локальной стороне. Локальные подключения к любому из этих адресов достигнут server:5678 от ssh_server . Другие компьютеры в вашей локальной сети не могут достичь туннеля, потому что 127.0.0.1 и [::1] являются адресами обратной связи; под любой машиной подразумевается сама машина.

Чтобы сделать ваш туннель доступным для других компьютеров, привяжите его к адресу, который они могут достичь. Допустим, 192.168.0.14 является действительным адресом клиента, который запускает ssh ; привязать к нему:

ssh -L 192.168.0.14:1234:server:5678 ssh_server

или по всем доступным адресам (выберите одну команду):

ssh -L 0.0.0.0:1234:server:5678 ssh_server                            # IPv4
ssh -L [::]:1234:server:5678 ssh_server                               # IPv6
ssh -L 0.0.0.0:1234:server:5678 -L [::]:1234:server:5678 ssh_server   # IPv4 and IPv6

Последний самый "открытый" туннель также может быть создан с помощью -g . От man 1 ssh:

-g Позволяет удаленным хостам подключаться к локальным перенаправленным портам.

-g эквивалентно параметру -o GatewayPorts=yes и параметру GatewayPorts yes в файле ssh_config . Этот отрывок из man 5 ssh_config объясняет это еще лучше:

GatewayPorts
Указывает, разрешено ли удаленным хостам подключаться к локальным перенаправленным портам. По умолчанию ssh(1) связывает перенаправления локальных портов с адресом обратной связи. Это предотвращает подключение других удаленных хостов к перенаправленным портам. GatewayPorts можно использовать для указания того, что ssh должен связывать переадресацию локальных портов с адресом подстановочного знака, что позволяет удаленным хостам подключаться к перенаправленным портам. Аргумент должен быть yes или no . По умолчанию no .

Так:

ssh -g -L 1234:server:5678 ssh_server

Заметки:

  • Не забудьте открыть выбранный порт в брандмауэре.
  • Вы можете найти autossh полезным ...
  • … Вместе с параметром ExitOnForwardFailure в ssh (объяснено в man 5 ssh_config).
  • Обычно HTTP-сервер может отклонять URL-адреса, которые он не считает своими собственными. Вы сказали, что localhost:port работает в вашем браузере. Если URL-адреса, такие как http://192.168.0.14:1234 , не работают, несмотря на туннель, проверьте настройку сервера.

Дополнительные ресурсы:

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