Гид по технологиям

Как проверить активные SSH‑сессии на удалённом хосте

7 min read Linux Обновлено 01 Dec 2025
Проверка активных SSH‑сессий на Linux
Проверка активных SSH‑сессий на Linux

Важно: некоторые команды могут требовать прав root или sudo, а вывод зависит от конфигурации системы (например, ведётся ли DNS‑резолвинг, сохранение /var/log/wtmp и пр.).

Активные SSH‑подключения на Linux

Зачем проверять активные SSH‑сессии

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

  • выявлять несанкционированные входы;
  • обнаруживать подвешенные/зависшие сеансы, расходующие ресурсы;
  • собирать данные для аудита и инвентаризации подключений;
  • принимать оперативные меры (разрывать соединение, блокировать IP, менять ключи).

Ниже — обзор команд, которые пригодятся для разных сценариев: быстрый осмотр, подробный аудит и поиск исторических подключений.

Быстрый обзор команд (шпаргалка)

  • who — кто сейчас вошёл в систему;
  • w — доп. информация о процессах пользователей и простое idle‑время;
  • last — история входов/выходов по /var/log/wtmp;
  • netstat — классический инструмент для сетевых соединений (может быть устаревшим на некоторых дистрибутивах);
  • ss — современная замена netstat для работы с сокетами.

Все перечисленные команды удобно комбинировать с grep, awk, sort и sudo.

1. who — кто сейчас в системе

Команда who показывает список вошедших пользователей и терминалы, с которых они подключены. Часто достаточно для быстрого подтверждения наличия SSH‑сессий.

Пример использования:

who

Вывод who с пользователями и адресами

Вывод who обычно содержит имя пользователя, терминал (tty/pts), дату/время входа и исходный адрес. Если нужно показать время последней перезагрузки и информацию о пользователях, можно добавить флаги:

who -b -u

Пояснение: -b показывает время последней загрузки, -u — показывает время простоя и идентификатор процесса входа.

Когда who даёт недостаточно данных:

  • он не покажет детали сокетов и статусы соединений (ESTABLISHED vs LISTEN);
  • не даст историю прошлых подключений — смотрите last.

2. w — подробная информация о сессиях

Команда w показывает, кто вошёл в систему, с чего и какие процессы выполняются. Она удобна, чтобы увидеть простые показатели нагрузки от конкретных сессий и время бездействия.

Пример простого вызова:

w

Типичный вывод включает заголовок с текущим временем, uptime, количество пользователей и нагрузку на систему и далее строки с именем пользователя, TTY, задачами и командой.

Часто полезные опции w:

ПараметрЧто делает
-h, –no-headerНе выводить заголовок
-u, –no-currentИгнорировать отображение текущих процессов
-s, –shortКороткий вывод (без времени входа, JCPU, PCPU)
-f, –fromВключить/отключить поле FROM (адрес источника)
–helpПоказать справку
-v, –versionПоказать версию

Пример: посмотреть короткий вывод с адресами:

w -s -f

Когда w особенно полезна:

  • нужно увидеть, какие команды выполняют пользователи прямо сейчас;
  • требуется оценить, кто влияет на CPU/IO;
  • необходимо определить долгие периоды простоя у конкретной учётной записи.

Когда w не помогает:

  • если нужно знать точные параметры сетевого соединения (TCP‑статусы), используйте ss/netstat;
  • для истории подключений используйте last.

3. last — история входов и выходов

last читает файл /var/log/wtmp (по умолчанию) и показывает журнал входов/выходов. Это основной инструмент, когда нужно понять, кто и когда подключался ранее.

Базовый вызов:

last

Пример вывода last с историей сессий

Если журнал большой, фильтруйте по признакам «ещё в системе» (still logged in) или по ssh:

last | grep still
last | grep ssh

Полезные опции last:

ПараметрЧто делает
-a, –hostlastПоказывать hostname в последнем столбце
-d, –dnsПоказывать имена хостов вместо IP (через DNS)
-f, –fileИспользовать указанный файл вместо /var/log/wtmp
-F, –fulltimesПоказать полные даты и времена входа/выхода
-i, –ipПоказать IP вместо имени хоста

Примеры:

last -F -i
last -f /var/log/wtmp.1 | grep username

Ограничения last:

  • если ротация логов или очистка /var/log/wtmp — часть истории может быть потеряна;
  • не показывает статус сетевого соединения (ESTABLISHED/LISTEN).

4. netstat — классика для сетевых соединений

netstat показывает активные сетевые соединения, таблицы маршрутизации и статистику интерфейсов. На современных дистрибутивах netstat может быть частью пакета net-tools, который устарел в пользу iproute2 и ss, но всё ещё широко используется.

Показать только SSH (обычно порт 22):

netstat -tn | grep :22

Параметры:

  • -t — TCP;
  • -n — не делать обратного DNS‑последнего (быстрее);
  • -a — показать все соединения (LISTEN и ESTABLISHED).

Пример для всех соединений с ssh:

netstat -a -n | grep ':22'

Ограничение netstat: на новых системах предпочтительнее ss — он быстрее и даёт более детальные данные.

5. ss — современная и быстрая альтернатива

ss (socket statistics) ведёт себя как более быстрый и функциональный аналог netstat. Он показывает детали сокетов, их состояния и связанные процессы.

Показать все соединения, связанные с SSH:

ss -a -n | grep ':22'

Фильтрация Established соединений:

ss -a -n | grep ':22' | grep ESTAB

Полезные флаги:

  • -a — все сокеты;
  • -n — цифры вместо имён;
  • -t — только TCP;
  • -p — показать PID/имя процесса (требует root для большинства данных);
  • -e — более подробный вывод о состоянии сокета.

Пример с PID:

sudo ss -t -a -p | grep ':22'

ss особенно удобен, когда нужно связать соединение с конкретным процессом sshd и увидеть время, TTL, объём данных и состояние сокета.

Дополнительные источники данных и файлы логов

  • /var/log/auth.log (или /var/log/secure на RHEL/CentOS) — аутентификация SSH, неудачные попытки, успешные логины;
  • journalctl -u sshd — системный журнал службы sshd в systemd‑системах;
  • /var/log/wtmp — для last; /var/log/btmp — попытки неуспешных логинов (для lastb).

Пример просмотра последних записей sshd в journalctl:

sudo journalctl -u sshd --since "1 hour ago"

Практический рабочий план (SOP) для анализа и реагирования

  1. Быстрый осмотр (1–2 минуты):
    • who
    • w -s
    • ss -t -a -n | grep ‘:22’ | grep ESTAB
  2. Исторический анализ (5–10 минут):
    • last | grep ssh
    • sudo journalctl -u sshd –since “24 hours ago” | tail -n 200
  3. Если обнаружено подозрительное подключение:
    • зафиксировать время, IP и пользователя;
    • при необходимости закрыть соединение: найти PID sshd и kill -9 (крайняя мера);
    • при массовых попытках — добавить правило в iptables/nftables/Fail2Ban;
    • пересмотреть аутентификацию: отключить пароли, включить ключи, сменить ключи, проверить авторизованные ключи в ~/.ssh/authorized_keys.
  4. Документировать инцидент и, если нужно, собрать дампы сетевого трафика (tcpdump).

Ролевые контрольные списки

Администратор (быстрый чек):

  • кто сейчас подключён (who, w);
  • есть ли долгие простои (w);
  • активные сокеты ssh (ss);
  • проверка логов auth/journalctl.

Инженер по безопасности (глубокий аудит):

  • история подключений (last, lastb);
  • корреляция с firewall/IDS;
  • анализ подозрительных IP через «whois», геолокация и репутацию;
  • аудит ключей доступа и sudo‑прав.

DevOps (автоматизация):

  • встраивание проверок в мониторинг (Prometheus/Alertmanager);
  • настроить Fail2Ban или аналог;
  • централизованная логировка (ELK/Graylog).

Когда эти методы не сработают (ограничения и контрпримеры)

  • Если /var/log/wtmp очищен или недоступен — last ничего не покажет.
  • При использовании нестандартных портов SSH проверяйте нужный порт (не только :22).
  • Шифрованные и туннелированные подключения (например, VPN/Tor) скрывают исходный IP вплоть до прокси.
  • Если атакующий получает root и модифицирует местные инструменты, вывод who/w/ss/netstat может быть подделан — полагайтесь на удалённые журналы и сетевые зеркала.

Лист команд для быстрого копирования (cheat sheet)

who
w -s -f
last | grep still
sudo ss -t -a -p | grep ':22'
netstat -tn | grep ':22'
sudo journalctl -u sshd --since "1 hour ago"
last -F -i
sudo tcpdump -n -s 0 -w capture.pcap port 22

Руководство по безопасности и жёсткой настройке SSH

  • Отключите логин root по паролю (PermitRootLogin no) и используйте ключи;
  • запретите аутентификацию паролем (PasswordAuthentication no);
  • ограничьте вход по IP через firewall и AllowUsers/AllowGroups;
  • используйте Fail2Ban или эквивалент для автоматической блокировки груб‑форс атак;
  • периодически пересматривайте ~/.ssh/authorized_keys и удаляйте неиспользуемые ключи;
  • включите двухфакторную аутентификацию для критичных систем, если возможно.

Краткий словарь терминов

  • SSH — протокол Secure Shell для защищённого доступа к удалённым системам;
  • TTY/PTS — терминальные устройства, pts — псевдотерминал по сети;
  • ESTAB/ESTABLISHED — установленное TCP‑соединение;
  • wtmp/btmp — системные файлы журнала входов/неудачных входов.

Decision tree для оперативного реагирования (Mermaid)

flowchart TD
  A[Найдено подозрительное SSH‑подключение?] -->|Нет| B[Мониторинг]
  A -->|Да| C[Собрать данные 'who/ss/journalctl/last']
  C --> D{Подключение активно?}
  D -->|Да| E[Определить PID и обслуживающую службу]
  E --> F[Если аномалия — закрыть соединение, заблокировать IP]
  D -->|Нет| G[Проанализировать историю и логи]
  G --> H[Оценить риск, обновить правила безопасности]
  F --> I[Документировать и сообщить]
  H --> I

Критерии приёмки

  • Можно быстро отобразить список текущих SSH‑пользователей (who/w).
  • Можно подтвердить активное TCP‑соединение на SSH‑порту (ss/netstat).
  • Можно получить историю логинов за период (last/journalctl).
  • При подозрении — можно остановить сеанс и заблокировать IP.

Итог и рекомендации

Регулярный мониторинг SSH‑подключений — простая и эффективная профилактика безопасности. Комбинация who/w для быстрого контроля, last для истории и ss/netstat для сетевой диагностики покрывает большинство задач. Для производства автоматизируйте оповещения, храните журналы централизованно и периодически проводите аудит ключей доступа.

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправить ошибку Game Bar — ПК не соответствует требованиям
Windows

Исправить ошибку Game Bar — ПК не соответствует требованиям

Диагностика и оптимизация MySQL
Базы данных

Диагностика и оптимизация MySQL

Как заблокировать сайт в Google Chrome
браузер

Как заблокировать сайт в Google Chrome

Как загрузить видео на YouTube — пошагово
Видео

Как загрузить видео на YouTube — пошагово

Защита веб‑камеры в Windows 11 — настройка и советы
Безопасность

Защита веб‑камеры в Windows 11 — настройка и советы

Как восстановить неформатируемую USB‑флешку
Техника

Как восстановить неформатируемую USB‑флешку