Как найти активные SSH‑подключения на Linux‑сервере

С помощью простых команд — who, w, ps, netstat, ss и last — вы быстро увидите, кто сейчас подключён по SSH, откуда и какие процессы запущены. Для оперативного контроля используйте ss/netstat, для истории — last, для деталей процесса — ps.
Важно: утилиты читают разные источники (utmp, proc, сокеты). Если вы не видите сессию в одной команде, проверьте другие команды и системные логи.
Предварительные требования
- Сервер под управлением Linux.
- Доступ root или права, позволяющие читать системные журналы и /var/run/utmp.
Основная идея
Определить активные SSH‑подключения можно несколькими способами: утилиты чтения записей входа (who, w, last), просмотр процессов sshd (ps), проверка сетевых сокетов (ss, netstat). Каждая команда даёт свой срез информации: идентификатор пользователя, IP клиента, PID процесса, состояние сокета и история входов.
Использование who
who показывает список пользователей, которые в данный момент вошли в систему (источник: /var/run/utmp).
Откройте терминал и выполните:
who
Пример вывода:
root pts/0 2020-05-01 02:37 (27.61.161.61)
root pts/1 2020-05-01 02:39 (45.58.38.21)
Вывод показывает активные сессии и IP‑адреса клиентов.
Использование w
w даёт более подробную информацию: время входа, простой, какие команды запущены в сессии и среднюю загрузку.
w
Пример вывода:
02:40:07 up 1 day, 18:35, 2 users, load average: 0.02, 0.02, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 27.61.161.61 02:37 1.00s 0.04s 0.01s ssh [email protected]
root pts/1 45.58.38.21 02:39 1.00s 0.02s 0.00s w
w удобен для мониторинга и быстрого определения, какие процессы выполняются в сессиях.
Использование ps для просмотра sshd процессов
ps покажет процессы sshd с PID и аргументами, что полезно для отладки и привязки сессии к процессу.
ps auxwww | grep sshd: | grep -v grep
Пример вывода:
root 609 0.0 0.1 12160 7268 ? Ss Apr29 0:01 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 35532 0.0 0.2 13864 8796 ? Ss 02:37 0:00 sshd: root@pts/0
root 35669 0.0 0.2 13860 8916 ? Ss 02:38 0:00 sshd: root@pts/1
PID помогает корректно завершать зависшие сессии или сопоставлять записи в журнале.
Использование netstat для проверки установленных TCP‑соединений
netstat (если установлен) показывает сетевые соединения и связанные с ними процессы.
netstat -tnpa | grep 'ESTABLISHED.*sshd'
Пример вывода:
tcp 0 88 45.58.38.21:22 27.61.161.61:8363 ESTABLISHED 35532/sshd: root@pt
tcp 0 0 45.58.38.21:22 45.58.38.21:51166 ESTABLISHED 35669/sshd: root@pt
Этот вариант полезен, когда нужно увидеть активные TCP‑сессии и номера портов клиентов.
Использование ss для современного просмотра сокетов
ss — современная альтернатива netstat. Быстрее и даёт расширенный вывод.
ss | grep -i ssh
Пример вывода:
tcp ESTAB 0 0 45.58.38.21:51166 45.58.38.21:ssh
tcp ESTAB 0 56 45.58.38.21:ssh 27.61.161.61:8363
tcp ESTAB 0 0 45.58.38.21:ssh 45.58.38.21:51166
ss хорошо годится для быстрого анализа подключений и фильтрации по состоянию сокета.
Использование last для истории входов и текущих сессий
last читает /var/log/wtmp и показывает историю входов и выхода. Параметр grep по слову “still” фильтрует активные сессии.
last -a | grep -i still
Пример вывода:
root pts/1 Fri May 1 02:39 still logged in 45.58.38.21
root pts/0 Fri May 1 02:37 still logged in 27.61.161.61
reboot system boot Wed Apr 29 08:04 still running 5.4.0-26-generic
last полезен для расследования активности пользователей и построения истории входов.
Короткая шпаргалка: команды и цель
- who — кто сейчас вошёл (utmp).
- w — кто вошёл и что делает (процессы в сессии).
- ps — процессы sshd и PID.
- ss/netstat — сетевые подключения и состояния сокетов.
- last — история входов и текущие сессии из wtmp.
Когда методы дают разные результаты
- utmp и wtmp отражают логические сессии; они могут не обновиться, если процесс завершился некорректно.
- ps показывает процессы, даже если запись в utmp отсутствует.
- ss/netstat показывает уровни TCP‑сокетов; если SSH‑соединение перешло в состояние CLOSE_WAIT, оно всё ещё может появляться в списке.
Если вы не видите сессию в одной команде, проверьте другие источники и системные журналы (/var/log/auth.log или journalctl).
Альтернативные подходы и инструменты
- auditd: записывает события входа/выхода на уровне аудита.
- journalctl -u sshd: просмотр логов systemd для sshd.
- faill2ban: автоматически блокирует подозрительные попытки входа.
- Использование централизованного логирования (ELK, Graylog) для корреляции входов по всем серверам.
Быстрая проверка (one‑liner) для активных SSH клиентов с PID
ss -tnp | grep sshd | awk '{print $5 " -> " $6}'
Или более надёжно, чтобы получить IP и PID:
ss -tnp | grep sshd | sed -E 's/ +/ /g'
(Команды можно адаптировать под нужный формат вывода и окружение.)
Чек‑лист по ролям
- Администратор: проверьте ps, ss, w, и завершите зависший PID при необходимости.
- Инженер безопасности: проверьте журналы (/var/log/auth.log), установите fail2ban и MFA для SSH.
- Операции/DevOps: настройте централизованную агрегацию логов и оповещения по аномальной активности.
Жёсткая конфигурация безопасности SSH
- Отключите прямой root‑доступ: PermitRootLogin no.
- Включите аутентификацию по ключу и отключите парольную аутентификацию: PasswordAuthentication no.
- Используйте ограничение по IP (AllowUsers/AllowGroups или firewall).
- Настройте мониторинг и алёрты по числу одновременных сессий.
Модель принятия решения: какой инструмент применять
flowchart TD
A[Нужно быстро увидеть, кто онлайн?] -->|Да| B[who или w]
A -->|Нужно PID и детали процесса| C[ps]
A -->|Нужно сетевые сокеты| D[ss/netstat]
A -->|Нужно история входов| E[last]
B --> F[Команда выполнена]
C --> F
D --> F
E --> F
Критерии приёмки
- Вы видите список активных сессий с IP и временем входа.
- Доступны PIDы sshd, если требуется завершение сессии.
- Совпадают результаты ss/netstat и ps при проверке конкретной сессии.
Короткий глоссарий (1‑строчно)
- utmp: файл /var/run/utmp — текущее состояние входов.
- wtmp: файл /var/log/wtmp — история входов/выходов.
- sshd: демон OpenSSH, обслуживающий SSH‑подключения.
- ss/netstat: инструменты для просмотра сетевых сокетов.
Тестовые случаи / приёмка
- Создать SSH‑сессию с клиента и проверить, что who, w и ss показывают эту сессию.
- Принудительно завершить sshd‑процесс и проверить, что записи в utmp/wtmp обновились корректно.
- Смоделировать многопользовательскую нагрузку и убедиться, что команды показывают ожидаемое число сессий.
Итог
Вы узнали несколько надёжных способов найти активные SSH‑подключения на Linux: who, w, ps, ss/netstat и last. Для оперативного мониторинга используйте ss или netstat, для отладки — ps, а для истории — last. Всегда сверяйте несколько источников и проверяйте журналы, если поведение кажется аномальным.
Примечание: для продакшн‑окружений рекомендуется централизовать логи и настроить оповещения о необычных входах.
Похожие материалы

GmusicFS: монтирование Google Play Music на Android
Локальный yum‑репозиторий для Fedora 8

Как включить моно-аудио в Windows

Fallout 4 в стиле Borderlands — твик для ПК

Как исправить разряд батареи на iOS 16
