Управління з'єднаннями SSH


9

Як на сервері Linux я можу знайти список усіх поточних з'єднань SSH або відключити певне з'єднання SSH?


Вас цікавлять вхідні або вихідні SSH-з'єднання? або обидва?
Шон Чін

2
Це питання є більш актуальним для суперпользователя

Мене цікавлять лише вхідні з'єднання.
Серін

Відповіді:


13

Якщо ви плануєте це робити в інтерактивному режимі, найпростіше було б просто викликати 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щоб припинити з'єднання.


1
-uдасть вам PID.
gravyface

це не показує IP-адреси, якщо у одного користувача є декілька з'єднань
Хтось

Чомусь це не спрацювало. З віддаленої машини я ввійшов у свою машину за допомогою ssh, а на своїй машині виконав a who -u. Вбивство Pid не припинило з'єднання на моїй віддаленій машині. Однак після того, як я зробив lsof -i | grep ":ssh" запропонований у відповіді @kce, я отримав інший pid; вбивство цього процесу припинило зв'язок. Можливо, є кілька процесів, які запускаються через ssh-з'єднання і вбивають той, який відображається тим, хто не припиняє з'єднання; ось моє пояснення.
Neo M Hacker

8

Як щодо використання 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

3
Використовуйте, lsof -i tcp:22і греп вам не знадобиться.
Шон Чін

Тільки якщо ви запустили sshта не вказали -pваріант ..
Jindra Helcl

1

Для перегляду ssh-з'єднань ви можете: a netstat -atn | grep ':22'. Він показує всі з'єднання на порту 22.

Щоб перервати з'єднання, ви можете спробувати знайти PID sshd (SSH Daemon) за допомогою ps-ax.

Редагувати: Я думаю, ви можете знайти PID їх bashсеансу (або еквівалентну оболонку). Вбивство, яке повинно їх добре скинути.

Ще один ресурс: ця тема має деякі поради з цього питання.


У мене немає активних з'єднань на моїй поточній машині, але netstat все ще перераховує з'єднання tcp і tcp6. Що б я зробив із PID-кодом sshd? Ви маєте на увазі, що я повинен вбити весь SSH-сервер просто для того, щоб перервати єдине з'єднання?
Серін

@Cerin Ці два з'єднання показують, що він прослуховує лише в цих портах

Ви не вказували, але я маю хоч це. Вибачте: /
Будь ласка, ставитесь до своїх модників добре.

0

Спробуйте це:

$ ps aux | grep sshd

Від'єднати їх ви могли kill PID(де PIDзнаходиться ідентифікатор процесу у другому стовпці), якщо у вас є кореневі привілеї або користувач, про який йдеться.


Це лише показує, що sshd працює і користувачем було встановлено з'єднання (не кількість підключень, з якого IP-адреси це)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.