Alle verbundenen SSH-Sitzungen auflisten?

Alle verbundenen SSH-Sitzungen auflisten?

Ich habe mich einfach per SSH mit dem Root-Zugriff verbunden und dann noch einmal per SSH mit dem Root-Zugriff auf derselben Maschine. Ich habe also zwei Fenster geöffnet, die beide per SSH mit dem Root-Zugriff auf meiner Remote-Maschine verbunden sind.

Wie kann ich in der Shell eine Liste dieser beiden Sitzungen anzeigen?

Antwort1

whooder w; who -afür weitere Informationen.

Diese Befehle zeigen nur alle Anmeldesitzungen auf einem Terminalgerät an. Eine SSH-Sitzung wird auf einem Pseudoterminal-Slave ( pts) stattfinden, wie in der TTYSpalte angezeigt, aber nicht alle pts-Verbindungen sind SSH-Sitzungen. Beispielsweise werden Programme, die ein Pseudoterminalgerät wie xtermoder erstellen screen, als angezeigt pts. SieheUnterschied zwischen pts und ttyfür eine bessere Beschreibung der verschiedenen Werte in der TTYSpalte. Darüber hinaus zeigt dieser Ansatz niemanden an, der bei einer SFTP-Sitzung angemeldet ist, da SFTP-Sitzungen keine Shell-Anmeldesitzungen sind.

Ich kenne keine Möglichkeit, alle SSH-Sitzungen explizit anzuzeigen. Sie können diese Informationen ableiten, indem Sie Anmeldeinformationen von utmp/ wtmpüber ein Tool wie last, woder whowie ich es gerade beschrieben habe lesen oder indem Sie Netzwerktools wie @sebelk verwenden, die in ihrer Antwort beschrieben wurden, um offene TCP-Verbindungen auf Port 22 zu finden (oder wo auch immer Ihre SSH-Daemons lauschen).

Ein dritter Ansatz, den Sie wählen könnten, besteht darin, die Protokollausgabe des SSH-Daemons zu analysieren. Abhängig von Ihrer Betriebssystemverteilung, SSH-Verteilung, Konfiguration usw. kann Ihre Protokollausgabe an verschiedenen Orten liegen. Auf einer RHEL 6-Box fand ich die Protokolle in /var/log/sshd.log. Auf einer RHEL 7-Box und auch auf einer Arch Linux-Box musste ich verwenden, journalctl -u sshdum die Protokolle anzuzeigen. Einige Systeme geben SSH-Protokolle möglicherweise an Syslog aus. Ihre Protokolle können an diesen Orten oder anderswo liegen. Hier ist ein Beispiel dessen, was Sie sehen könnten:

[myhost ~]% grep hendrenj /var/log/sshd.log | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

Die Protokolle zeigen, wann Sitzungen geöffnet und geschlossen werden, wem die Sitzung gehört, von wo aus sich der Benutzer verbindet und mehr. Sie müssen jedoch Folgendes tun:vielder Analyse, wenn Sie dies von einem einfachen, für Menschen lesbaren Ereignisprotokoll in eine Liste der aktuell aktiven Sitzungen umwandeln möchten, und es wird wahrscheinlich immer noch keine genaue Liste sein, wenn Sie mit der Analyse fertig sind, da die Protokolle nicht genügend Informationen enthalten, um festzustellen, welche Sitzungen noch aktiv sind – Sie raten im Wesentlichen nur. Der einzige Vorteil, den Sie durch die Verwendung dieser Protokolle erzielen, besteht darin, dass die Informationen direkt von SSHD stammen und nicht wie bei den anderen Methoden über eine Quelle aus zweiter Hand.

Ich empfehle, einfach zu verwenden w. In den meisten Fällen erhalten Sie damit die gewünschten Informationen.

Antwort2

Sie können jede SSH-Sitzung mit dem folgenden Befehl anzeigen:

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

Oder vielleicht ist das hier nützlich:

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:



       

Antwort3

Erweiterung der Antwort von @sebelk:

Die Lösung mit netstatist gut, erfordert aber Root-Rechte. Darüber hinaus wurde das net-toolsPaket (das bereitstellt netstat) in einigen neueren Linux-Distributionen als veraltet markiert (https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/).

netstatEine alternative Lösung besteht dann darin, den Ersatz für , zu verwenden ss. Beispiel (beachten Sie, dass Sie root nicht mehr benötigen):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628

Antwort4

Zur einfachen Referenz hinzugefügt.

Wenn Sie sich in einer Pseudo-Shell befinden (Beispiel: /dev/pts/0 ), wäre eine der einfachsten Möglichkeiten:

[user1@host ~]$ echo $SSH_CONNECTION

Es sollte Folgendes zurückgeben: Ihre IP und Ihr Port sowie die IP, mit der Sie verbunden sind, und der Port

192.168.0.13 50473 192.168.0.22 22

Sie können auch einige Informationen erhalten, indem Sie ttyoder who( w) verwenden: (Bearbeiten: Ich sehe, dass es jetzt oben in einem anderen Beitrag aufgeführt ist)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)

verwandte Informationen