Odpowiedzi:
who
lub w
; who -a
po 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 TTY
kolumnie, ale nie wszystkie połączenia pts są sesjami SSH. Na przykład programy tworzące pseudoterminalowe urządzenia, takie jak xterm
lub screen
będą wyświetlane jako pts
. Zobacz Różnicę między pts i tty, aby uzyskać lepszy opis różnych wartości znalezionych w TTY
kolumnie. 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
/ wtmp
za pomocą narzędzia, takiego jak last
, w
lub who
takiego, 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 sshd
aby 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.
-i
jest 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 tty
lub 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)
SECONDS
globalnego. 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 netstat
jest dobre, ale wymaga uprawnień roota. Ponadto net-tools
pakiet (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.
last
może nie być wymieniona.
last
obsługuje -p
? Co to robi?
"last from util-linux 2.31.1"
ma to na pewno.
who -a
polecenia