Jak mogę znaleźć na serwerze z systemem Linux listę wszystkich bieżących połączeń SSH lub rozłączyć określone połączenie SSH?
linux
command-line-interface
ssh
Cerin
źródło
źródło
Odpowiedzi:
Jeśli planujesz to zrobić interaktywnie, najprostszym byłoby po prostu wywołanie
who
i sprawdzenie, czy są użytkownicy ze zdalnego hosta.Nie jest to oczywiście niezawodne, ale niezwykle łatwe do wpisania na żądanie i łatwe do przetworzenia ludzkim okiem.
Jak wskazał @gravyface, jeśli podasz
-u
opcjęwho
, wydrukuje również powiązany PID, który możesz przekazać,kill
aby zakończyć połączenie.źródło
-u
da ci PID.who -u
. Zabicie pid nie zakończyło połączenia na moim zdalnym komputerze. Jednak po tym, jak zrobiłemlsof -i | grep ":ssh"
sugestię w odpowiedzi @kce, otrzymałem inny pid; zabicie tego procesu zakończyło połączenie. Może istnieje wiele procesów, które są uruchamiane z powodu połączenia ssh i zabicia tego wyświetlanego przez osobę, która nie przerywa połączenia; to moje wyjaśnienie.Co powiesz na używanie lsof?
Powinieneś być w stanie zabić naruszające połączenie (np. Rozłączyć użytkownika2):
źródło
lsof -i tcp:22
i nie będziesz potrzebował grep.ssh
i nie określisz-p
opcji.Aby wyświetlić połączenia ssh, możesz zrobić
netstat -atn | grep ':22'
. Pokazuje wszystkie połączenia na porcie 22.Aby porzucić połączenie, możesz spróbować znaleźć PID sshd (Demon SSH) za pomocą
ps-ax
.Edycja: Myślę, że możesz znaleźć PID ich
bash
sesji (lub równoważnej powłoki). Zabicie, które powinno ich w porządku.Kolejny zasób: ten wątek zawiera kilka wskazówek na ten temat.
źródło
Spróbuj tego:
$ ps aux | grep sshd
Aby je rozłączyć, możesz
kill PID
(gdziePID
jest identyfikator procesu w drugiej kolumnie), jeśli masz uprawnienia roota lub jesteś pytanym użytkownikiem.źródło