15

При создании обратных туннелей в последних версиях 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 для автоматического управления пулом портов представляется наиболее эффективным способом сделать это.

2 ответа2

1

Если вы установили 'LogLevel' в файле конфигурации sshd_config на DEBUG1 (или любой уровень DEBUG), тогда sshd запишет номера портов в /var/log/auth.log.

Помните, что использование LogLevel уровня DEBUG или выше может быть угрозой конфиденциальности, так как многое регистрируется.

(из /var/log/auth.log удалено несколько строк для отображения соответствующей информации)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

Если вы выполните его, вы увидите, где можно проанализировать информацию о соединении, а затем переадресованный порт (в данном случае 39813).

Я использовал эту командную строку между двумя моими компьютерами, у меня настроен вход в систему с помощью ssh-ключа, поэтому никаких паролей и задержек

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-N указывает, что команда не указана, а -T останавливает выделение tty для этого соединения.

Другим способом распространения информации о подключении к порту будет анализ ее на стороне клиента и отправка электронной почты, jabber, текстовых сообщений, дымовых сигналов или голубя для передачи номера порта тому, кому это нужно.

0

Вы можете передать stderr из ssh в программу, которая открывает соединение с сервером на целевой машине и сообщает его имя / IP-адрес / серийный номер / что угодно вместе с номером порта. Вроде как это:

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .