Я переношу серверы с порта 22 в существующей многопользовательской среде. Я настроил sshd для прослушивания двух портов: 22 и нового порта.
Теперь я хотел бы определить, когда пользователь подключается или подключается к порту 22. Это, по-видимому, сложнее, чем я ожидал.
Я попытался запустить регистрацию в sshd_config, но даже DEBUG не записывает номер порта.
В настоящее время я сканирую вывод netstat на предмет TCP-соединений с портом 22, но он перечисляет чертовски много ложных срабатываний от случайных сканеров ботов. [причина переноса порта]
С помощью lsof -n -i TCP:22 -a -c sshd -a -u ^root,^sshd
вы можете получить список sshd
процессы и имена пользователей с их сокетами на порту 22. Он пропускает те, которые принадлежат root
или sshd
потому что они не соответствуют зарегистрированным пользователям.
Совершенно другой подход - добавить несколько команд в /etc/ssh/sshrc
, который будет разбирать $SSH_CONNECTION
и зарегистрируйте это: logger -p auth.notice -t "sshd[$$]" "$SSH_CONNECTION"
Третий подход - создать второй экземпляр sshd
для порта 22 и настройте его для входа в другой объект.
Попробуйте что-то вроде этого:
sudo lsof -i -n -P | egrep sshd.*ESTABLISHED | egrep `who -a|grep pts|awk '{print $7}'|sed ':a;N;$!ba;s/\n/\\|/g'`
Чтобы уточнить, цель этой команды - сопоставить lsof
совпадений (которые показывают используемый порт) с сеансами из who
с участием pts
(извлечение PID из вывода), чтобы отфильтровать ложные срабатывания.
Другими словами, он показывает соединения от процессов с PID, которые удерживают сеанс pts ssh.