Назад | Перейти на главную страницу

Как может хост-процесс SSH определить, какие порты были перенаправлены клиентом (-R, а не -L)

(Я не могу решить, публиковать это здесь или в SuperUser, но, поскольку это сделано для целей системного администратора, это кажется более подходящим)

У меня есть ситуация, когда клиенты SSH будут запрашивать переадресацию порта, используя -R вариант SSH. Во время подключения я хочу иметь возможность регистрировать, какие порты они перенаправили.

Я планирую сделать это, заставив запускать определенную команду (command=my-command в authorized_keys файл, то есть), который будет вести этот журнал, а затем запускать исходную команду (имя пользователя или указанный пользователь).

Единственный способ, который я нашел до сих пор, требует запуска sudo и выглядит довольно взломанным:

sudo lsof -aPni@127.0.0.1 -Fn -p12345 | grep "^n" | grep -v '\->' | awk -F: '{print $NF}' | sort | uniq* где 12345 это идентификатор процесса sshd который обрабатывает это соединение (то есть родительский процесс любого скрипта, который я запускаю для его проверки.

Есть что-нибудь более элегантное (а-ля SSH_* переменные среды, которые устанавливаются для другой информации о подключении) доступны мне?

* Для любопытных: первая часть команды получает все сетевые порты, привязанные к локальному интерфейсу (-i@127.0.0.1) и (-a) принадлежащий процессу 12345 (-p12345) и форматирует его для машинного чтения (-Fn). В -P и -n flags заставляет его давать необработанные номера портов и сетевые адреса. Вторая часть (grep "^n") возвращает мне только сетевую информацию. Следующая часть (grep -v '\->') удаляет установленные соединения (тем самым оставляя "слушающие" порты). Следующая часть (awk -F: '{print $NF}') использует awk, чтобы получить последнее поле, разделенное знаком ':', что дает мне порт (я не использую вырезать здесь, потому что для IPv6-соединения номер поля может измениться). Последние две части просто дают мне уникальный список портов. Я поместил это объяснение здесь, потому что lsof это фантастическая команда, которую нужно знать, и каждый должен это знать.

ssh ~ ключи?

~ # Список переадресованных соединений.

Вы можете установить уровень ведения журнала sshd на DEBUG1 а затем grep the logs, вы будете искать такую ​​строку, как:

Dec 25 21:40:25 d34dh0r53 sshd[21963]: debug1: Local forwarding listening on ::1 port 8085.

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