(Я не могу решить, публиковать это здесь или в 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 для его чтения.