Odpowiedzi:
wholub w; who -apo dodatkowe informacje.
Te polecenia pokazują tylko wszystkie sesje logowania na urządzeniu końcowym. Sesja SSH będzie na pseudo-terminalu slave ( pts), jak pokazano w TTYkolumnie, ale nie wszystkie połączenia pts są sesjami SSH. Na przykład programy tworzące pseudoterminalowe urządzenia, takie jak xtermlub screenbędą wyświetlane jako pts. Zobacz Różnicę między pts i tty, aby uzyskać lepszy opis różnych wartości znalezionych w TTYkolumnie. Co więcej, to podejście nie pokaże nikomu, kto zaloguje się do sesji SFTP, ponieważ sesje SFTP nie są sesjami logowania powłoki.
Nie znam żadnego sposobu jawnego pokazania wszystkich sesji SSH. Możesz wnioskować o tych informacjach, czytając dane logowania z utmp/ wtmpza pomocą narzędzia, takiego jak last, wlub whotakiego, jak właśnie opisałem, lub używając narzędzi sieciowych, takich jak @sebelk opisanych w ich odpowiedzi, aby znaleźć otwarte połączenia TCP na porcie 22 (lub w dowolnym miejscu Twojego SSH demony są / nasłuchują).
Trzecie podejście, które możesz zastosować, to parsowanie danych wyjściowych dziennika z demona SSH. W zależności od dystrybucji systemu operacyjnego, dystrybucji SSH, konfiguracji itd. Dane wyjściowe dziennika mogą znajdować się w wielu różnych miejscach. Na pudełku RHEL 6 znalazłem logi /var/log/sshd.log. Na pudełku RHEL 7, a także na pudełku Arch Linux, musiałem użyć, journalctl -u sshdaby wyświetlić dzienniki. Niektóre systemy mogą wysyłać dzienniki SSH do syslog. Twoje dzienniki mogą znajdować się w tych miejscach lub w innym miejscu. Oto próbka tego, co możesz zobaczyć:
[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
Dzienniki pokazują, kiedy sesje otwierają się i zamykają, do kogo należy sesja, skąd użytkownik się łączy i nie tylko. Będziesz jednak musiał przeprowadzić wiele analiz, jeśli chcesz uzyskać to z prostego dziennika zdarzeń czytelnego dla człowieka na liście aktualnie aktywnych sesji, a prawdopodobnie nadal nie będzie to dokładna lista, gdy skończyłeś parsować, ponieważ dzienniki nie zawierają wystarczającej ilości informacji, aby określić, które sesje są nadal aktywne - w zasadzie tylko zgadujesz. Jedyną korzyścią, jaką zyskujesz dzięki tym dziennikom, jest to, że informacje pochodzą bezpośrednio z dysku SSHD zamiast z drugiej ręki, podobnie jak inne metody.
Polecam po prostu użyć w. W większości przypadków dostaniesz potrzebne informacje.
Możesz zobaczyć każdą sesję ssh za pomocą następującego polecenia:
[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
O może to może być przydatne:
[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:
pgrep -ai sshd
pgrep: invalid option -- 'i'w systemie Ubuntu 14.04.
-ijest dostępny tylko dla smaków Mac / BSD. na Ubuntu możesz użyć pgrep -af ssd. Szczegółowe informacje można znaleźć na serverfault.com/a/883270/116777
Możesz także użyć
ps ax | grep sshd
Dodano dla uproszczenia.
Jeśli jesteś w pseudo-powłoce (przykład: / dev / pts / 0), jednym z najprostszych sposobów byłoby:
[user1@host ~]$ echo $SSH_CONNECTION
Powinien zwrócić: twój ip i port oraz ip, do którego jesteś podłączony i port
192.168.0.13 50473 192.168.0.22 22
Możesz także uzyskać informacje, używając ttylub who( w): (edytuj: Widzę, że teraz jest to lista powyżej w innym poście)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDSglobalnego. Możesz użyć tego za pośrednictwem echo $SECONDS, który następnie wyświetla ilość czasu, od kiedy postrzegane połączenie
Rozwijanie odpowiedzi @ sebelk:
Użyte rozwiązanie netstatjest dobre, ale wymaga uprawnień roota. Ponadto net-toolspakiet (który zapewnia netstat) był przestarzały w niektórych nowszych dystrybucjach Linuksa ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ ).
Alternatywnym rozwiązaniem jest wówczas użycie zamiennik netstat, ss. Na przykład (pamiętaj, że nie potrzebujesz już roota):
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
Możesz użyć
last | head
Używałem tego w moim skrypcie .login od lat, aby zobaczyć, kto ostatnio zalogował się do systemu. Było to urządzenie zabezpieczające przed złym człowiekiem, sprawdzające, czy ktoś jest w systemie za pomocą twojego loginu.
lastmoże nie być wymieniona.
lastobsługuje -p? Co to robi?
"last from util-linux 2.31.1"ma to na pewno.
who -apolecenia