Туннелирование в обратном порту

50

Мне нужно показать кому-то сайт, работающий на моей локальной машине завтра. Обычно я выполнял это путем переадресации портов на моем локальном маршрутизаторе, но благодаря мирикеле, который отказывает аппаратное обеспечение, а его замена является ужасной, мой текущий маршрутизатор не позволяет мне выполнять переадресацию портов.

Таким образом, застряв в этой задержке и не желая подталкивать все это на правильный сервер, у меня была сумасшедшая идея: Можно ли просто перенаправить мой порт на внешний сервер через SSH?

Я уже занимался туннелированием портов, но обычно делаю это правильно:

  • Я подключаюсь к удаленному ящику и спрашиваю, что порт 12345 появляется на моем локальном компьютере в порту 12345.
  • Я запускаю что-то на P12345 на удаленной машине.
  • Я могу получить к нему доступ через localhost: 12345

Что мне нужно :

  • Подключитесь к удаленному компьютеру и попросите, чтобы его локальный P12345 извлекал вещи из моего локального P12345 (через туннель)
  • Я запускаю что-то на своем локальном компьютере на P12345
  • Другие пользователи могут получить доступ к удаленному: 12345 и посмотреть мой localhost: 12345
задан Oli 22.06.2011 в 18:46
источник

2 ответа

83

Команда для пересылки порта 80 с вашего локального компьютера ( localhost ) на удаленный хост на порту 8000:

ssh -R 8000:localhost:80 [email protected]

Для этого требуется дополнительная настройка на сервере SSH, добавьте строки в /etc/ssh/sshd_config :

Match User oli
   GatewayPorts yes

Затем перезагрузите конфигурацию сервером, выполняющим sudo reload ssh .

Значение GatewayPorts yes заставляет SSH связывать порт 8000 с подстановочным адресом, поэтому он становится доступным для общего адреса remote-machine ( remote-machine:8000 ).

Если вам нужно иметь возможность не привязывать все к подстановочному адресу, измените GatewayPorts yes на GatewayPorts clientspecified . Поскольку ssh связывается с адресом loopback по умолчанию, вам нужно указать пустой bind_address для привязки подстановочного адреса:

ssh -R :8000:localhost:80 [email protected]

: before 8000 является обязательным, если для GatewayPorts установлено значение clientspecified , и вы хотите разрешить публичный доступ к remote-machine:8000 .

Соответствующие отрывки из руководства:

ssh (1)

  

-R [bind_address:] port: host: hostport
  Указывает, что данный порт на удаленном (серверном) хосте должен быть перенаправлен на данный хост и порт на локальной стороне. Это работает, выделяя сокет для прослушивания порта на удаленной стороне, и всякий раз, когда делается соединение с этим портом, соединение пересылается по защищенному каналу и выполняется соединение с хостом порта хоста с локальной машины. По умолчанию прослушивающий сокет на сервере будет привязан только к интерфейсу loopback. Это может быть переопределено, указав bind_address. Пустой адрес_связывания или адрес '*' указывает, что удаленный сокет должен прослушивать все интерфейсы. Указание удаленного связывания_данных будет выполнено только в том случае, если включена опция GatewayPorts сервера (см. sshd_config (5)). .

sshd_config (5)

  

GatewayPorts
  Указывает, разрешено ли удаленным хостам подключаться к портам, перенаправленным для клиента. GatewayPorts можно использовать для указания того, что sshd должен разрешать удаленные пересылки портов для привязки к адресам без обратной связи, что позволяет другим хостам подключаться. Аргумент может быть «нет», чтобы заставить удаленные пересылки портов быть доступными только локальному хосту, «да», чтобы принудительно перенаправить удаленные пересылки портов на подстановочный адрес или «clientspecified», чтобы позволить клиенту выбрать адрес, к которому привязана переадресация. По умолчанию «нет».

См. также:

ответ дан Lekensteyn 22.06.2011 в 19:28
источник
8

Если сервер имеет GatewayPorts no , вы можете добиться того же результата, выполнив ssh -g -L 8001:localhost:8000 [email protected] на сервере после выполнения команды ssh -R на клиенте. Это сделает шлейф-порт 8000 на сервере доступным для всех интерфейсов на порту 8001.

    
ответ дан FaST4 20.06.2016 в 12:17