Назад | Перейти на главную страницу

ssh -R привязывается к 127.0.0.1 только на удаленном

я бегу 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 с сервера на себя (даже если он без толку добавляет уровень шифрования).