я бегу ssh -N -f -R127.0.2.3:23000:127.1.2.3:23000 user@remote
, и я ожидаю, что туннель на удаленном компьютере открылся 127.0.2.3:23000
, но открывается только на 127.0.0.1:23000
, и это неудобно, потому что мне нужно открыть несколько туннелей удаленно, но слушать один и тот же TCP-порт.
На локальном компьютере туннель указывает на правильный IP-адрес (127.1.2.3:23000).
Я попытался создать несколько устройств с обратной связью на удаленном компьютере, но безрезультатно.
То же самое для серверов Linux и Freebsd (openbsd-ssh)
Итак, почему ssh -R не привязывается к ip loopback на удаленном компьютере, кроме 127.0.0.1?
Спасибо.
(извините за плохую редакцию :)
В то время местный необязательный адрес привязки находится под контролем клиента SSH (указывается с помощью -L
/LocalForward
или изменен с -g
/GatewayPorts
в клиентконфигурации), удаленный необязательный адрес привязки, указанный клиентом с помощью -R
/RemoteForward
находится под контролем SSH сервер встать на сторону сервер конфигурация GatewayPorts
. По умолчанию это no
. Он должен быть установлен на clientspecified
чтобы позволить клиенту выбрать, к какому адресу привязать:
GatewayPorts
Указывает, разрешено ли удаленным хостам подключаться к портам, перенаправленным для клиента. По умолчанию sshd (8) связывает перенаправления удаленного порта с адресом обратной связи.. Это предотвращает подключение других удаленных хостов к перенаправленным портам.GatewayPorts
может использоваться, чтобы указать, что sshd должен разрешать переадресацию удаленного порта для привязки к адресам без обратной связи, что позволяет другим хостам подключаться. Аргумент может бытьno
чтобы принудительная переадресация удаленных портов была доступна только локальному хосту,yes
для принудительной привязки перенаправления удаленного порта к подстановочному адресу, илиclientspecified
чтобы позволить клиенту выбрать адрес к которому привязана пересылка. По умолчаниюno
.
Кроме того, клиент RemoteForward
запись говорит также:
[...]
Если bind_address не указан, по умолчанию выполняется привязка только к адресам обратной связи. Если bind_address - «*» или пустая строка, тогда пересылка запрашивается для прослушивания на всех интерфейсах. Указание удаленного bind_address будет успешным только в том случае, если серверGatewayPorts
опция включена (см. sshd_config (5)).
Таким образом, вы должны иметь возможность изменять конфигурацию сервера ssh на сервере (обычно с корневым доступом) и добавлять (или редактировать) эту запись в sshd_config
файл, поэтому он показывает:
GatewayPorts clientspecified
Если вы не можете, вы можете использовать другие доступные инструменты, если они есть (или устанавливаемые локально) на стороне сервера, чтобы преодолеть это (довольно слабое) ограничение безопасности. Например socat
, или ssh
сам с помощью LocalForward
с сервера на себя (даже если он без толку добавляет уровень шифрования).