Voir les connexions SSH actives sur Linux

Si vous êtes administrateur Linux et responsable des serveurs, il est fréquent de devoir connaître combien de connexions SSH sont actives et d’où elles proviennent. Linux propose plusieurs commandes et outils pour trouver les connexions SSH actives sur un serveur.
Ce guide explique différentes méthodes, donne une fiche pratique, une checklist par rôle, une mini-méthodologie d’audit et des recommandations de sécurité.
Prérequis
- Un serveur exécutant Linux.
- Accès root (ou sudo) sur ce serveur pour certaines commandes.
Important: sans privilèges élevés, certaines commandes ne montreront pas tous les processus ou les détails réseau.
Méthodes principales
Chaque méthode ci‑dessous montre la commande, ce qu’elle retourne et quand l’utiliser.
Utiliser who
who liste les utilisateurs actuellement connectés.
Commande:
who
Exemple de sortie:
root pts/0 2020-05-01 02:37 (27.61.161.61)
root pts/1 2020-05-01 02:39 (45.58.38.21)
Quand l’utiliser: diagnostic rapide pour savoir qui est connecté et d’où.
Utiliser w
w donne plus d’informations que who : temps d’inactivité, charge, et processus en cours.
Commande:
w
Exemple de sortie:
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
Quand l’utiliser: contrôle de l’activité en session et des processus associés.
Utiliser ps pour trouver les PIDs SSH
ps permet d’obtenir les processus sshd et leurs PIDs.
Commande:
ps auxwww | grep sshd: | grep -v grep
Exemple de sortie:
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
Quand l’utiliser: quand vous avez besoin du PID pour tuer une session ou pour corréler avec d’autres outils.
Utiliser netstat pour les connexions TCP établies
netstat montre les connexions réseau et peut filtrer les sessions SSH établies.
Commande:
netstat -tnpa | grep 'ESTABLISHED.*sshd'
Exemple de sortie:
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
Note: netstat peut ne pas être installé par défaut sur les distributions récentes (utilisez ss).
Utiliser ss pour un équivalent moderne de netstat
ss est plus rapide et souvent recommandé à la place de netstat.
Commande:
ss | grep -i ssh
Exemple de sortie:
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
Quand l’utiliser: diagnostic réseau détaillé et filtrage facile.
Utiliser last pour les connexions toujours actives
last lit /var/log/wtmp et montre les sessions récentes; l’option grep pour “still” permet d’isoler les sessions encore actives.
Commande:
last -a | grep -i still
Exemple de sortie:
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
Quand l’utiliser: vérifier les sessions en cours avec un historique lisible.
Commandes complémentaires utiles
- lsof pour trouver quel processus écoute sur le port 22:
lsof -i :22
- journalctl pour consulter les logs du service sshd (systemd):
journalctl -u sshd --since "1 hour ago"
- grep sur /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL) pour les connexions et tentatives:
grep "sshd" /var/log/auth.log | tail -n 50
Quand l’utiliser: enquête post-incident et corrélation d’horodatages.
Fiche pratique — Cheat sheet de commandes
Objectif | Commande | Résultat attendu |
---|---|---|
Lister les utilisateurs connectés | who | utilisateurs + IP source |
Voir activité détaillée | w | idle, process, load |
Trouver PIDs sshd | ps auxwww grep sshd | PIDs des sessions |
Connexions réseau établies | ss | connexions TCP sur ssh |
Connexions avec historique | last -a grep still | sessions encore actives |
Processus écoutant sur 22 | lsof -i :22 | processus et PIDs |
Logs du service sshd | journalctl -u sshd | événements SSH récents |
Mini-méthodologie d’audit rapide
- who pour vérifier la présence immédiate.
- ss ou netstat pour lier l’entrée réseau au PID.
- ps pour confirmer l’utilisateur et le TTY.
- journalctl / auth.log pour corroborer provenance et horaire.
- Si suspect: couper la session (kill PID) et forcer la rotation des clés/sessions.
Checklist par rôle
Administrateur système:
- Vérifier qui est connecté (who/w).
- Lister PIDs sshd et vérifier commandes en cours (ps).
- Auditer logs SSH et verrouiller si nécessaire.
Opérateur réseau:
- Vérifier connexions établies et ports (ss/netstat).
- Corréler adresses IP avec pare-feu et ACL.
Sécurité/Incident Response:
- Collecter logs (journalctl, auth.log).
- Capturer evidences (ss, ps, lsof) avant d’agir.
- Isoler, tuer sessions compromises, forcer rotations d’identifiants.
Quand ces méthodes peuvent échouer
- wtmp/who/last ne montrent pas les sessions si wtmp a été altéré ou tronqué.
- netstat peut manquer si non installé; privilégiez ss.
- Sans privilèges root, vous verrez des informations partielles.
- Les connexions via proxy ou jump host peuvent masquer l’IP client réelle.
Sécurité et confidentialité
Notes importantes:
- Les adresses IP et les identifiants utilisateurs sont des données personnelles dans certains contextes. Limitez l’accès aux journaux aux personnes autorisées.
- Pour conformité, conservez les logs nécessaires et documentez toute action d’intervention.
Bonnes pratiques de durcissement:
- Désactivez l’accès root direct via SSH et utilisez des comptes non-privés avec sudo.
- Activez l’authentification par clé publique et désactivez l’authentification par mot de passe si possible.
- Limitez les adresses autorisées via un pare-feu (iptables/nftables) ou Fail2ban pour prévenir les attaques par force brute.
Decision flowchart pour choisir l’outil
flowchart TD
A[Démarrer: que voulez-vous savoir ?] --> B{Besoin rapide ?}
B -- Oui --> C[who ou w]
B -- Non --> D{Vérifier réseau ou logs ?}
D -- Réseau --> E[ss 'ou netstat']
D -- Logs --> F[journalctl / grep auth.log]
E --> G[Trouver PID -> ps]
F --> G
G --> H[Action: kill, bloquer IP, enquêter]
Glossaire rapide
- SSH: protocole sécurisé d’accès distant.
- PID: identifiant de processus.
- TTY/PTS: terminal pseudo-tty utilisé pour la session.
- wtmp/auth.log: fichiers de logs système.
Résumé
- Plusieurs outils permettent d’identifier les connexions SSH actives: who, w, ps, ss/netstat, last, lsof et journalctl.
- Utilisez la méthodologie proposée pour enquêter en toute sécurité et conservez les preuves avant toute action.
Important: toujours documenter et autoriser les interventions sur des sessions en production.
Bon audit et surveillez régulièrement vos accès SSH.