Skip to content

Анализ SSH-сессий с помощью команды zgrep и grep

В системном администрировании важную роль играет мониторинг и анализ логов. Логи позволяют отслеживать активность пользователей, выявлять потенциальные угрозы безопасности и диагностировать ошибки. Одним из ключевых логов в Unix-подобных системах является файл /var/log/auth.log, в котором фиксируются события аутентификации, включая вход через SSH.

Зачем анализировать сессии SSH?

SSH (Secure Shell) — это защищённый протокол удалённого доступа к серверу. Каждый раз, когда пользователь подключается к серверу по SSH, система записывает информацию об этом в логи. В частности, событие session opened for user указывает на успешное открытие пользовательской сессии. Анализ таких записей позволяет:

  • Понять, кто и когда подключался к серверу.
  • Отследить необычную или потенциально вредоносную активность.
  • Выполнить аудит доступа к серверу.

Команда для поиска SSH-сессий

Для поиска событий открытия сессий через SSH можно использовать следующую команду:

zgrep sshd /var/log/auth.log* -h | grep -F 'session opened for user'

Разбор команды

1. zgrep sshd /var/log/auth.log*

Команда zgrep работает как обычный grep, но умеет обрабатывать также сжатые файлы .gz. Это удобно, потому что старые версии файла /var/log/auth.log часто хранятся в сжатом виде (например, /var/log/auth.log.1.gz, /var/log/auth.log.2.gz и т.д.).
Флаг sshd указывает на то, что мы ищем только те строки, которые связаны с работой SSH-сервера.

2. -h

Этот параметр отключает вывод названий файлов перед результатами. Таким образом, в консоли будут видны только сами строки совпадений, без лишней информации.

3. | grep -F 'session opened for user'

Результаты предыдущего поиска передаются через пайп (|) на вход второй команды grep. Здесь уже фильтруется текст по точной строке 'session opened for user'.
Флаг -F говорит grep, что нужно интерпретировать строку как обычный текст, а не как регулярное выражение.


Что показывает эта команда?

Команда выводит список всех событий, когда пользователь успешно вошёл в систему через SSH и была создана новая сессия. Пример вывода может выглядеть так:

Aug 10 14:22:35 server sshd[1234]: pam_unix(sshd:session): session opened for user alice by (uid=0)
Aug 10 15:05:12 server sshd[5678]: pam_unix(sshd:session): session opened for user root by (uid=0)

Каждая запись содержит: - Дату и время события. - Имя хоста. - PID процесса sshd. - Имя пользователя, открывшего сессию. - UID пользователя, инициировавшего сессию (в данном случае — root, uid=0).


Как использовать результаты анализа?

  • Аудит безопасности: Если вы замечаете неожидаемые сессии (например, вход под учётной записью root или в ночное время), это может быть сигналом о компрометации системы.
  • Мониторинг активности: Можно отслеживать, какие пользователи наиболее активны, и как часто они подключаются к серверу.
  • Автоматизация: Эту команду можно встроить в скрипты, чтобы автоматически собирать статистику или отправлять оповещения при подозрительной активности.

Возможные модификации команды

Если вам нужно сузить диапазон поиска или обработать данные иначе, можно адаптировать команду:

  • Поиск за конкретную дату: bash zgrep 'Aug 10' /var/log/auth.log* | zgrep sshd | grep -F 'session opened for user'

  • Подсчёт количества сессий: bash zgrep sshd /var/log/auth.log* -h | grep -Fc 'session opened for user'

  • Сохранение результата в файл: bash zgrep sshd /var/log/auth.log* -h | grep -F 'session opened for user' > ssh_sessions.log