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 verstehenSie können jede Sitzung ssh mit dem folgenden Befehl anzeigen:
O vielleicht kann das nützlich sein:
quelle
pgrep -ai sshd
pgrep: invalid option -- 'i'
unter Ubuntu 14.04.-i
ist nur auf Mac / BSD-Flavours verfügbar. auf Ubuntu können Sie verwendenpgrep -af ssd
. Siehe serverfault.com/a/883270/116777 für DetailsSie können auch verwenden
quelle
Zur einfachen Bezugnahme hinzugefügt.
Wenn Sie sich in einer Pseudo-Shell befinden (Beispiel: / dev / pts / 0), ist einer der einfachsten Wege:
Es sollte zurückkehren: Ihre IP und Ihr Port und die IP, mit der Sie verbunden sind, und der Port
Du kannst auch ein paar Informationen erhalten, indem du
tty
oderwho
(w
) verwendest: (Bearbeiten: Ich sehe die Liste oben in einem anderen Beitrag.)quelle
SECONDS
Globale zu verweisen . Sie können dies überecho $SECONDS
, die es dann die Zeitdauer anzeigt, seit die Verbindung wahrgenommenErweiterung der Antwort von @ sebelk:
Die verwendete Lösung
netstat
ist gut, erfordert jedoch Root-Rechte. Darüber hinaus wurde dasnet-tools
Paket (das bereitstelltnetstat
) in einigen neueren Linux-Distributionen verworfen ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-the-replacements/ ).Eine alternative Lösung besteht dann darin, den Ersatz für
netstat
, zu verwendenss
. Zum Beispiel (beachten Sie, dass Sie root nicht mehr benötigen):quelle
Sie können verwenden
Ich habe dies jahrelang in meinem .login-Skript verwendet, um zu sehen, wer sich kürzlich beim System angemeldet hat. Es war ein Sicherheitsgerät für arme Leute, um zu sehen, ob sich jemand mit Ihrem Login auf dem System befand.
quelle
last
möglicherweise nicht einmal die Sitzung aufgelistet , in der Sie sich angemeldet haben.last
unterstützt-p
? Was tut es?"last from util-linux 2.31.1"
hat es sicher.