Как следует из названия.
Хост А действует как сервер (хост-бастион, называйте его как хотите).
Теперь хост B выполняет:
ssh -R 2222:localhost:22 пользователь@A
в результате в точке A создается TCP-сокет, но он привязан к 2222@Обратная петлят.е. предотвращая удаленные подключения к нему.
Как изменить 127.0.0.1 на 0.0.0.0или что-нибудь ещеболее разумно?
решение1
Вы пропустили необязательную bind_address
часть спецификации -R
. Вssh
документация(как связаноМайкрософт) он пишет,
По умолчанию прослушивающие сокеты TCP на сервере будут привязаны только к интерфейсу loopback. Это можно переопределить, указав
bind_address
. Пустойbind_address
или адрес*
указывает, что удаленный сокет должен прослушивать все интерфейсы. Указание удаленного сокета будет успешным только в том случае, если включена опцияbind_address
сервера (см.GatewayPorts
sshd_config(5)).
Вы используете версию параметра с тремя кортежами, но вам нужна версия с четырьмя кортежами:
-R port:host:hostport -R [bind_address]:port:host:hostport
Итак, чтобы разрешить любому человеку подключаться к прослушиваемому порту на удаленном сервере, вам необходимо убедиться, что GatewayPorts
в настройках сервера включена соответствующая функция.sshd_config
ииспользуйте такую вариацию команды:
ssh -R :2222:localhost:22 user@A
Начальное двоеточие ( :
) также подразумевает начальный подстановочный знак звездочки, который позволяет подключаться откуда угодно. Лично я думаю, что эта версия с подстановочным знаком делает более ясным, что написанное является намеренным:
ssh -R *:2222:localhost:22 user@A