who
oder w
; who -a
für weitere Informationen.
Diese Befehle zeigen nur alle Anmeldesitzungen auf einem Endgerät an. Eine SSH-Sitzung findet auf einem Pseudo-Terminal-Slave ( pts
) statt, wie in der TTY
Spalte gezeigt, aber nicht alle pts-Verbindungen sind SSH-Sitzungen. Zum Beispiel Programme, die ein Pseudo-Endgerät erstellen, wie zum Beispiel xterm
oder screen
werden als angezeigt pts
. Weitere Informationen zu den verschiedenen Werten in der TTY
Spalte finden Sie unter Unterschied zwischen pts und tty . Außerdem wird bei diesem Ansatz niemandem angezeigt, der sich bei einer SFTP-Sitzung angemeldet hat, 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
, w
oder who
wie ich es gerade beschrieben habe, lesen oder indem Sie Netzwerk-Tools wie @sebelk verwenden, die in ihrer Antwort beschrieben sind, um offene TCP-Verbindungen auf Port 22 (oder wo auch immer Ihr SSH ist) zu finden Daemon (s) lauschen).
Ein dritter Ansatz besteht darin, die Protokollausgabe des SSH-Dämons zu analysieren. Abhängig von Ihrer Betriebssystemverteilung, SSH-Verteilung, Konfiguration usw. kann die Protokollausgabe an verschiedenen Stellen erfolgen. Auf einer RHEL 6 Box habe ich die Logs gefunden /var/log/sshd.log
. Auf einer RHEL 7-Box und auch auf einer Arch Linux-Box musste ich journalctl -u sshd
zum Anzeigen der Protokolle verwenden. Einige Systeme geben möglicherweise SSH-Protokolle an syslog aus. Ihre Protokolle befinden sich möglicherweise an diesen oder anderen Orten. Hier ist ein Beispiel dessen, was Sie sehen könnten:
[myhost ~]% cat /var/log/sshd.log | grep hendrenj | 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 der Benutzer eine Verbindung herstellt und vieles mehr. Sie müssen jedoch eine Menge Parsing durchführen, wenn Sie dies von einem einfachen, von Menschen lesbaren Ereignisprotokoll in eine Liste der derzeit aktiven Sitzungen übertragen möchten, und es wird wahrscheinlich immer noch keine genaue Liste sein, wenn Sie haben das Parsen abgeschlossen, da die Protokolle nicht genügend Informationen enthalten, um festzustellen, welche Sitzungen noch aktiv sind - Sie raten im Grunde genommen 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 gebrauchte Quelle.
Ich empfehle nur mit w
. In den meisten Fällen erhalten Sie so die gewünschten Informationen.
who -a
Befehls verstehen