передача параметров удаленному перенаправлению порта ssh

У меня есть удаленный сервер, который находится за двумя шлюзами, как показано на рисунке. gw1 открыт для внешнего мира, а gw2 доступен только из gw1 . Сервер доступен только с gw2 и может быть одним из нескольких возможных серверов. Я хочу настроить переадресацию портов через ssh таким образом, чтобы 443 с моей клиентской машины автоматически перенаправлялись на 2000 на gw1 . Проблема не в этом. У меня:

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

И это прекрасно работает. Теперь я хочу, чтобы 2000 из gw1 были перенаправлены на 443 на сервере через gw2 , когда я ] ssh на gw2 . Я могу:

HostName gw2
LocalForward 2000 Server:443

Можно ли каким-либо образом передать IP-адрес сервера в качестве параметра, поскольку он может каждый раз быть другим?

network setup

0
задан 2 March 2018 в 16:37
1 ответ

Предположим, вам плевать на порт 2000. Ваша цель - перенаправить порт 443 с клиента на сервер. И предположим, что у вас есть хосты server1, server2, server3, ... в роли сервера. Если вы добавите это в свой .ssh/config:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

Тогда, например, ssh server1 соединится через gw1 в gw2, и переадресует 443 оттуда на сервер1.

Что это даст: ProxyCommand ProxyCommand говорит ssh сначала подключиться к gw1, а стандартный вывод труб - к nc gw2 22, который переадресует этот поток на gw2 на порт 22. Это создает туннель для стандартного входа на клиенте через gw1 в gw2:22. ssh затем открывает вторую сессию ssh через этот туннель в gw2. Как только это установлено, LocalForward переадресует порт 443 на сервер1 (%h - имя хоста, которое вы указали в командной строке).

Смотрите man ssh_config, чтобы прочитать о Match и ProxyCommand.

Обратите внимание, что хотя команда ssh server1, на самом деле она соединяет ssh только до gw2, а затем просто переадресует порт 443 оттуда. Оболочка откроется на gw2, а не на server1. Поэтому вы можете вместо этого запустить ssh -N server1, чтобы не открывать оболочку, так как на самом деле целью является только переадресация порта. К сожалению, в .ssh/config нет эквивалента -N, но Вы можете добавить что-то вроде LocalCommand wait, чтобы добиться того же самого - оболочка просто будет ждать, пока не будет прервана, и не будет приглашения оболочки.

.
0
ответ дан 5 December 2019 в 06:23

Теги

Похожие вопросы