Verwalten von SSH-Verbindungen

9

Wie würde ich auf einem Linux-Server eine Liste aller aktuellen SSH-Verbindungen finden oder eine bestimmte SSH-Verbindung trennen?

Cerin
quelle
Interessieren Sie sich für eingehende oder ausgehende SSH-Verbindungen? oder beides?
Shawn Chin
2
Diese Frage ist relevanter für Superuser
Ich interessiere mich nur für eingehende Verbindungen.
Cerin

Antworten:

12

Wenn Sie dies interaktiv planen, ist es am einfachsten, einfach aufzurufen whound zu prüfen, ob Benutzer von einem Remote-Host vorhanden sind.

[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)

Dies ist natürlich nicht kinderleicht, aber bei Bedarf extrem einfach zu tippen und mit dem menschlichen Auge leicht zu verarbeiten.

Wie @gravyface hervorhob, druckt bei Angabe einer -uOption whoauch die zugehörige PID aus, an die Sie übergeben können, killum eine Verbindung zu beenden.

Shawn Chin
quelle
-ugibt Ihnen die PID.
Soße Gesicht
Dies zeigt nicht die IPs, wenn es mehrere Verbindungen auf einem Benutzer gibt
Jemand
Aus irgendeinem Grund hat dies nicht funktioniert. Von einem Remotecomputer aus habe ich mich mit ssh bei meinem Computer angemeldet und auf meinem Computer a ausgeführt who -u. Durch das Beenden der PID wurde die Verbindung auf meinem Remotecomputer nicht beendet. lsof -i | grep ":ssh" Nachdem ich jedoch in der Antwort von @kce einen Vorschlag gemacht hatte, bekam ich eine andere PID. Durch das Beenden dieses Prozesses wurde die Verbindung beendet. Möglicherweise gibt es mehrere Prozesse, die aufgrund einer SSH-Verbindung gestartet werden und den Prozess beenden, der angezeigt wird, wenn die Verbindung nicht beendet wird. Das ist meine Erklärung.
Neo M Hacker
8

Wie wäre es mit 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)

Sie sollten dann in der Lage sein, die fehlerhafte Verbindung zu beenden (z. B. Benutzer 2 zu trennen):

# kill -9 3330

quelle
3
Verwenden lsof -i tcp:22Sie und Sie werden den grep nicht brauchen.
Shawn Chin
Nur wenn Sie sshdie -pOption ausführen und nicht angeben .
Jindra Helcl
1

Um die SSH-Verbindungen anzuzeigen, können Sie a netstat -atn | grep ':22'. Es werden alle Verbindungen an Port 22 angezeigt.

Um die Verbindung zu trennen, können Sie versuchen, die PID des sshd (SSH Daemon) mit zu ermitteln ps-ax.

Bearbeiten: Ich denke, Sie können die PID ihrer bashSitzung (oder eine gleichwertige Shell) finden. Das zu töten sollte sie in Ordnung bringen.

Eine weitere Ressource: Dieser Thread enthält einige Tipps zu diesem Thema.

Rodrigo Hahn
quelle
Ich habe keine aktiven Verbindungen auf meinem aktuellen Computer, aber netstat listet immer noch eine TCP- und TCP6-Verbindung auf. Was würde ich mit der PID von sshd machen? Wollen Sie damit sagen, dass ich den gesamten SSH-Server beenden sollte, um eine einzelne Verbindung zu trennen?
Cerin
@Cerin Diese beiden Verbindungen zeigen, dass es auf diesen Ports (nur)
Sie haben nicht angegeben, aber ich sollte darüber nachdenken. Entschuldigung: /
Rodrigo Hahn
0

Versuche dies:

$ ps aux | grep sshd

Sie können die Verbindung trennen kill PID(wo PIDbefindet sich die Prozess-ID in der zweiten Spalte), wenn Sie über Root-Berechtigungen verfügen oder der betreffende Benutzer sind.

ltn100
quelle
Dies zeigt nur, dass sshd ausgeführt wird und der Benutzer, mit dem die Verbindung hergestellt wurde (nicht Anzahl der Verbindungen, von welcher IP es ist)