Управление SSH-соединениями

9

На сервере Linux как найти список всех текущих SSH-соединений или отключить конкретное SSH-соединение?

Cerin
источник
Вас интересуют входящие или исходящие соединения SSH? или оба?
Шон Чин
2
Этот вопрос более актуален для суперпользователя
Меня интересуют только входящие соединения.
Cerin

Ответы:

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-соединения и убивают тот, который отображается тем, кто не прерывает соединение; это мое объяснение.
Нео М Хакер
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)

После этого вы сможете уничтожить нарушающее соединение (например, отключить user2):

# kill -9 3330

источник
3
Используйте, lsof -i tcp:22и вам не понадобится grep.
Шон Чин
Только если вы запускаете sshи не указываете -pопцию ..
Jindra Helcl
1

Для просмотра соединений SSH вы можете сделать netstat -atn | grep ':22'. Он показывает все соединения на порту 22.

Чтобы разорвать соединение, вы можете попробовать найти PID sshd (SSH Daemon) с помощью ps-ax.

Изменить: я думаю, вы можете найти PID их bashсессии (или эквивалентную оболочку). Убийство, которое должно отбросить их.

Другой ресурс: в этой теме есть несколько советов по этому вопросу.

Пожалуйста, относитесь к своим модам хорошо.
источник
У меня нет активных соединений на моей текущей машине, но netstat все еще перечисляет соединения tcp и tcp6. Что бы я сделал с PID sshd? Вы намекаете, что я должен убить весь SSH-сервер, чтобы разорвать единственное соединение?
Cerin
@Cerin Эти два соединения показывают, что он прослушивает эти порты (только)
Вы не указали, но я должен об этом знать. Извините: /
Пожалуйста, относитесь к своим модам хорошо.
0

Попробуй это:

$ ps aux | grep sshd

Чтобы отключить их, вы можете kill PID(где PIDуказан идентификатор процесса во втором столбце), если у вас есть права суперпользователя или речь идет о пользователе.

ltn100
источник
Это только показывает, что sshd работает и пользователь, с которым было установлено соединение (не количество соединений, с какого IP-