Gérer les connexions SSH

9

Sur un serveur Linux, comment trouver une liste de toutes les connexions SSH actuelles ou déconnecter une connexion SSH spécifique?

Cerin
la source
Êtes-vous intéressé par les connexions SSH entrantes ou sortantes? ou les deux?
Shawn Chin
2
Cette question est plus pertinente pour le superutilisateur
Je ne m'intéresse qu'aux connexions entrantes.
Cerin

Réponses:

13

Si vous prévoyez de le faire de manière interactive, le plus simple serait d'appeler simplement whoet de voir s'il y a des utilisateurs d'un hôte distant.

[you@host]$ who
user1      :0           Feb  8 09:45
user1      pts/1        Feb 14 17:56 (:0.0)
malcolm    pts/3        Feb 15 17:50 (cockpit.serenity.com)
reynold    pts/2        Feb 15 17:48 (host123.firefly.co.uk)

Ce n'est bien sûr pas infaillible, mais il est extrêmement simple à taper à la demande et à traiter facilement avec l'œil humain.

Comme l'a souligné @gravyface, si vous incluez une -uoption who, vous imprimerez également le PID associé que vous pourrez ensuite transmettre pour killmettre fin à une connexion.

Shawn Chin
la source
1
-uvous donnera le PID.
gravyface
cela n'affiche pas les IP s'il y a plusieurs connexions sur un seul utilisateur
Quelqu'un
Pour une raison quelconque, cela n'a pas fonctionné. Depuis une machine distante, je me suis connecté à ma machine en utilisant ssh, et dans ma machine, j'ai exécuté a who -u. Tuer le pid n'a pas mis fin à la connexion sur ma machine distante. Cependant, après avoir fait une lsof -i | grep ":ssh" suggestion dans la réponse de @kce, j'ai obtenu un pid différent; tuer ce processus a mis fin à la connexion. Peut-être que plusieurs processus sont démarrés à cause d'une connexion ssh et tuent celui affiché par qui ne met pas fin à la connexion; c'est mon explication.
Neo M Hacker
8

Que diriez-vous d'utiliser lsof?

# lsof -i |grep ":ssh"

sshd    1943      root    3u  IPv6   5698       TCP *:ssh (LISTEN)
sshd    1943      root    4u  IPv4   5700       TCP *:ssh (LISTEN)
sshd    3217      root    3r  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3220      user1   3u  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3327      root    3r  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd    3330      user2   3u  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)

Vous devriez alors être en mesure de supprimer la connexion incriminée (par exemple, pour déconnecter l'utilisateur2):

# kill -9 3330

la source
3
Utilisez lsof -i tcp:22et vous n'aurez pas besoin du grep.
Shawn Chin
Seulement si vous exécutez le sshet ne spécifiez pas l' -poption ..
Jindra Helcl
1

Pour afficher les connexions ssh, vous pouvez faire a netstat -atn | grep ':22'. Il affiche toutes les connexions sur le port 22.

Pour interrompre la connexion, vous pouvez essayer de trouver le PID du sshd (SSH Daemon) avec ps-ax.

Edit: je pense que vous pouvez trouver le PID de leur bashsession (ou shell équivalent). Tuer qui devrait les faire tomber.

Autre ressource: ce fil propose quelques astuces sur le sujet.

Veuillez bien traiter vos mods.
la source
Je n'ai aucune connexion active sur ma machine actuelle, mais netstat répertorie toujours une connexion tcp et tcp6. Que ferais-je avec le PID de sshd? Voulez-vous dire que je devrais tuer tout le serveur SSH juste pour supprimer une seule connexion?
Cerin
@Cerin Ces deux connexions montrent qu'il écoute sur ces ports (uniquement)
Vous ne l'avez pas précisé, mais j'aurais dû y penser. Désolé: /
Veuillez bien traiter vos mods.
0

Essaye ça:

$ ps aux | grep sshd

Pour les déconnecter, vous pouvez kill PID(où se PIDtrouve l'ID de processus dans la deuxième colonne), si vous avez des privilèges root, ou si vous êtes l'utilisateur en question.

ltn100
la source
Cela montre seulement que sshd est en cours d'exécution et l'utilisateur avec lequel la connexion a été établie (pas le nombre de connexions, de quelle IP il s'agit)