Właśnie SSH'owałem do roota, a potem SSH'owałem do roota na tym samym komputerze. Więc mam dwa okna otwarte zarówno SSH'd do roota na moim zdalnym komputerze.
W powłoce, w jaki sposób mogę zobaczyć listę tych dwóch sesji?
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.
who -a
poleceniaMożesz zobaczyć każdą sesję ssh za pomocą następującego polecenia:
O może to może być przydatne:
źródło
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/116777Możesz także użyć
źródło
Dodano dla uproszczenia.
Jeśli jesteś w pseudo-powłoce (przykład: / dev / pts / 0), jednym z najprostszych sposobów byłoby:
Powinien zwrócić: twój ip i port oraz ip, do którego jesteś podłączony i port
Możesz także uzyskać informacje, używając
tty
lubwho
(w
): (edytuj: Widzę, że teraz jest to lista powyżej w innym poście)źródło
SECONDS
globalnego. Możesz użyć tego za pośrednictwemecho $SECONDS
, który następnie wyświetla ilość czasu, od kiedy postrzegane połączenieRozwijanie odpowiedzi @ sebelk:
Użyte rozwiązanie
netstat
jest dobre, ale wymaga uprawnień roota. Ponadtonet-tools
pakiet (który zapewnianetstat
) 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):źródło
Możesz użyć
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.
źródło
last
może nie być wymieniona.last
obsługuje-p
? Co to robi?"last from util-linux 2.31.1"
ma to na pewno.