При создании обратных туннелей в последних версиях OpenSSH можно указать удаленный порт 0 для привязки любого доступного порта:
-R [bind_address:] порт: хост: хост
...
Если аргумент порта равен 0, порт прослушивания будет динамически выделяться на сервере и сообщаться клиенту во время выполнения.
man-страница клиента openssh ssh
У меня вопрос, как я могу (в автоматическом режиме) определить это распределение портов на сервере. Представляется довольно бесполезным, что об этом сообщается узлу, на котором запущен ssh-клиент, но не целевому устройству, которое захочет установить соединения с этим портом для доступа к службам на клиенте.
Два похожих варианта, о которых я могу подумать, работают
# netstat -ntlp
на сервере и найдите подозрительные порты, связанные на 127.0.0.1 с помощью sshd или просмотрев выходные данные
# lsof -p $PPID | grep TCP | grep LISTEN
Но ни один из них не является приятным с точки зрения автоматизации, и нет никакого способа привязать динамические порты к исходному сервисному порту, если создано более одного такого туннеля.
Есть ли что-то, чего мне не хватает, чтобы эффективно получить список активных туннелей (как локальных, так и удаленных номеров портов) на стороне сервера sshd, как эквивалент переменной среды SSH_CONNECTION, но для активных туннелей?
Для некоторого контекста я пытаюсь создать потенциально очень много одновременных обратных туннелей к хосту, туннелируя обратно к одному и тому же номеру порта на многих разных хостах. Наличие стека TCP для автоматического управления пулом портов представляется наиболее эффективным способом сделать это.