передача параметров на удаленный порт ssh переадресация

передача параметров на удаленный порт ssh переадресация

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

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

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

HostName gw2
LocalForward 2000 Server:443

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

настройка сети

решение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 оттуда на server1.

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

Подробнее о Match и ProxyCommand читайте в man ssh_config.

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

Связанный контент