Як на сервері Linux я можу знайти список усіх поточних з'єднань SSH або відключити певне з'єднання SSH?
Як на сервері Linux я можу знайти список усіх поточних з'єднань SSH або відключити певне з'єднання SSH?
Відповіді:
Якщо ви плануєте це робити в інтерактивному режимі, найпростіше було б просто викликати who
і побачити, чи є користувачі з віддаленого хоста.
[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)
Це, звичайно, не є надійним, але надзвичайно просто набрати на вимогу та легко обробляти людським оком.
Як зазначав @gravyface, якщо ви включите -u
опцію, who
ви також роздрукуєте пов'язаний PID, який ви можете передати, kill
щоб припинити з'єднання.
-u
дасть вам PID.
who -u
. Вбивство Pid не припинило з'єднання на моїй віддаленій машині. Однак після того, як я зробив lsof -i | grep ":ssh"
запропонований у відповіді @kce, я отримав інший pid; вбивство цього процесу припинило зв'язок. Можливо, є кілька процесів, які запускаються через ssh-з'єднання і вбивають той, який відображається тим, хто не припиняє з'єднання; ось моє пояснення.
Як щодо використання 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)
Тоді ви маєте змогу вбити з'єднання, яке порушує правопорушення (наприклад, відключити користувача2):
# kill -9 3330
lsof -i tcp:22
і греп вам не знадобиться.
ssh
та не вказали -p
варіант ..
Для перегляду ssh-з'єднань ви можете: a netstat -atn | grep ':22'
. Він показує всі з'єднання на порту 22.
Щоб перервати з'єднання, ви можете спробувати знайти PID sshd (SSH Daemon) за допомогою ps-ax
.
Редагувати: Я думаю, ви можете знайти PID їх bash
сеансу (або еквівалентну оболонку). Вбивство, яке повинно їх добре скинути.
Ще один ресурс: ця тема має деякі поради з цього питання.
Спробуйте це:
$ ps aux | grep sshd
Від'єднати їх ви могли kill PID
(де PID
знаходиться ідентифікатор процесу у другому стовпці), якщо у вас є кореневі привілеї або користувач, про який йдеться.