Могу ли я использовать SSH для обслуживания туннельного ресурса (HTML-страницы) в локальной сети?

354
user3.1415927

У меня есть удаленный ресурс (веб-приложение), который я должен туннелировать на сервер для удаленного доступа. Я могу выполнить команду перенаправления через локальный порт, -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 
0

1 ответ на вопрос

1
Kamil Maciorowski

Т.Л., др? Используйте 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не работают, несмотря на туннель, проверьте настройку сервера.

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

Отличный ответ - к сожалению, это не решило мою проблему, так как, похоже, у меня есть ограничения, которые я не учел, задавая этот вопрос. Я отмечаю ваш ответ как принятый и задам новый вопрос с моими различными ограничениями. user3.1415927 6 лет назад 0