При создании обратных туннелей в последних версиях 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 для автоматического управления пулом портов представляется наиболее эффективным способом сделать это.
источник
Ответы:
Если вы установили 'LogLevel' в файле конфигурации sshd_config на DEBUG1 (или любой уровень DEBUG), тогда sshd запишет номера портов в /var/log/auth.log.
Помните, что использование LogLevel уровня DEBUG или выше может быть риском для конфиденциальности, так как многое регистрируется.
(из /var/log/auth.log удалено несколько строк для отображения соответствующей информации)
Если вы выполните его, вы увидите, где можно проанализировать информацию о соединении, а затем переадресованный порт (в данном случае 39813).
Я использовал эту командную строку между двумя моими машинами, у меня настроен вход в систему через ssh-ключ, поэтому пароль не запрашивается и не задерживается
-N указывает, что команда не указана, а -T останавливает выделение tty для этого соединения.
Другим способом распространения информации о подключении к порту будет анализ ее на стороне клиента и отправка электронной почты, jabber, текстовых сообщений, дымовых сигналов или голубя для передачи номера порта тому, кому это нужно.
источник
Вы можете направить stderr
ssh
в программу, которая открывает соединение с сервером на целевой машине и сообщает его имя / IP-адрес / серийный номер / что угодно вместе с номером порта. Вроде как это:источник