Я должен показать кому-то веб-сайт, работающий на моей локальной машине завтра. Обычно я выполнил бы это перенаправлением портов на моем локальном маршрутизаторе, но благодаря сбою аппаратных средств и его замены, являющейся ужасным, мой текущий маршрутизатор не позволяет мне сделать перенаправление портов.
Так застрявший в этой задержке и не желании продвинуть все это на надлежащий сервер, у меня была сумасшедшая идея: я могу просто передать свой порт внешнему серверу по SSH?
Я сделал порт, туннелирующий прежде, но я обычно делаю это правильный путь вокруг:
Что я хочу сделать:
Команда для порта пересылки 80 от Вашей локальной машины (localhost
) к удаленному хосту на порте 8000:
ssh -R 8000:localhost:80 oli@remote-machine
Это требует дополнительной тонкой настройки на сервере 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
связывает с петлевым адресом по умолчанию, необходимо указать пустое bind_address
для привязки подстановочного адреса:
ssh -R :8000:localhost:80 oli@remote-machine
:
прежде 8000
обязательно если GatewayPorts
установлен на clientspecified
и Вы хотите предоставить открытый доступ к remote-machine:8000
.
Выборки соответствующего руководства:
- R [bind_address:] port:host:hostport
Указывает, что данный порт на удаленном (сервер) хост должен быть передан данному хосту и порту на локальной стороне. Это работает путем выделения сокета для слушания порта на удаленной стороне, и каждый раз, когда связь установлена с этим портом, соединение передается по безопасному каналу, и связь установлена с серверным портом hostport от локальной машины. По умолчанию сокет слушания на сервере будет связан с петлевым интерфейсом только. Это может быть переопределено путем определения bind_address. Пустой bind_address или адрес '*', указывает, что удаленный сокет должен послушать во всех интерфейсах. Определение удаленного bind_address только успешно выполнится, если опция GatewayPorts сервера будет включена (см. sshd_config (5)).
GatewayPorts
Указывает, позволяют ли удаленным хостам соединиться с портами, переданными для клиента. GatewayPorts может использоваться, чтобы указать, что sshd должен позволить передачам удаленного порта связывать с непетлевыми адресами, таким образом позволив другим хостам соединиться. Аргументом может быть 'нет', чтобы вынудить передачи удаленного порта быть доступными локальному хосту только, 'да', чтобы вынудить передачи удаленного порта обязать с подстановочным адресом или 'clientspecified' позволять клиенту выбирать адрес, с которым связывается передача. Значение по умолчанию является 'нет'.
См. также:
Если сервер имеет GatewayPorts no
, можно достигнуть того же результата путем выполнения ssh -g -L 8001:localhost:8000 oli@remote-machine
на сервере, после того как Вы выполнились ssh -R
команда на клиенте. Это сделает закольцованный порт 8000 на сервере доступным во всех интерфейсах на порте 8001.