Zarządzanie połączeniami SSH

9

Jak mogę znaleźć na serwerze z systemem Linux listę wszystkich bieżących połączeń SSH lub rozłączyć określone połączenie SSH?

Cerin
źródło
Czy jesteś zainteresowany przychodzącymi lub wychodzącymi połączeniami SSH? lub obie?
Shawn Chin
2
To pytanie jest bardziej odpowiednie dla superużytkownika
Interesują mnie tylko połączenia przychodzące.
Cerin,

Odpowiedzi:

13

Jeśli planujesz to zrobić interaktywnie, najprostszym byłoby po prostu wywołanie whoi sprawdzenie, czy są użytkownicy ze zdalnego hosta.

[you@host]$ who
user1      :0           Feb  8 09:45
user1      pts/1        Feb 14 17:56 (:0.0)
malcolm    pts/3        Feb 15 17:50 (cockpit.serenity.com)
reynold    pts/2        Feb 15 17:48 (host123.firefly.co.uk)

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 -uopcję who, wydrukuje również powiązany PID, który możesz przekazać, killaby zakończyć połączenie.

Shawn Chin
źródło
1
-uda ci PID.
gravyface
to nie pokazuje adresów IP, jeśli istnieje wiele połączeń dla jednego użytkownika
Ktoś
Z jakiegoś powodu to nie działało. Ze zdalnego komputera zalogowałem się do mojego komputera za pomocą ssh, a na moim komputerze wykonałem who -u. Zabicie pid nie zakończyło połączenia na moim zdalnym komputerze. Jednak po tym, jak zrobiłem lsof -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.
Neo M Hacker
8

Co powiesz na używanie lsof?

# lsof -i |grep ":ssh"

sshd    1943      root    3u  IPv6   5698       TCP *:ssh (LISTEN)
sshd    1943      root    4u  IPv4   5700       TCP *:ssh (LISTEN)
sshd    3217      root    3r  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3220      user1   3u  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3327      root    3r  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd    3330      user2   3u  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)

Powinieneś być w stanie zabić naruszające połączenie (np. Rozłączyć użytkownika2):

# kill -9 3330

źródło
3
Użyj lsof -i tcp:22i nie będziesz potrzebował grep.
Shawn Chin,
Tylko jeśli uruchomisz sshi nie określisz -popcji.
Jindra Helcl 24.04.17.04
1

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 bashsesji (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.

Proszę, traktujcie dobrze swoje mody.
źródło
Nie mam aktywnych połączeń na bieżącym komputerze, ale netstat nadal wyświetla połączenia tcp i tcp6. Co mam zrobić z PID sshd? Czy sugerujesz, że powinienem zabić cały serwer SSH, aby porzucić jedno połączenie?
Cerin,
@Cerin Te dwa połączenia pokazują, że nasłuchuje na tych portach (tylko)
Nie sprecyzowałeś, ale powinienem to przemyśleć. Przepraszam: /
Proszę dobrze traktować swoje mody.
0

Spróbuj tego:

$ ps aux | grep sshd

Aby je rozłączyć, możesz kill PID(gdzie PIDjest identyfikator procesu w drugiej kolumnie), jeśli masz uprawnienia roota lub jesteś pytanym użytkownikiem.

ltn100
źródło
Pokazuje to tylko, że sshd jest uruchomiony i użytkownik, z którym ustanowiono połączenie (nie liczba połączeń, z jakiego adresu IP pochodzi)