Information Security Squad
stay tune stay secure
🐧 Как убить сессии пользователей на Linux
Иногда вам может потребоваться убить несколько пользовательских сессий в системе Linux.
Например, вам нужно запустить задание, для которого все пользователи должны выйти из системы.
Другой пример — вы наблюдаете много сеансов ssh в своей системе и хотите убить их всех.
Если да, то как это сделать?
Есть несколько способов добиться этого результата.
Я покажу вам несколько способов, а вы сможете выбрать тот, который соответствует вашим потребностям
Как посмотреть активные сессии ssh?
Вы можете увидеть активные сеансы ssh, запустив команду w на Linux.
1) Как убить пользовательские сессии в Linux с помощью команды pkill
Вы можете напрямую убить сеанс ssh определенного пользователя, используя номер сеанса tty.
Вы можете увидеть номер сеанса tty из вывода команды w.
В моем случае я собираюсь убить сеанс пользователя «magi», этот пользователь подключен к серверу с помощью pts/5, поэтому команда будет следующей:
Хотите понять разницу между tty и pts?
В чем разница между tty и pts?
- TTY: tty означает Teletypewriter. Он напрямую связан с системой как клавиатура / мышь или последовательное соединение с устройством (например, консоль в вашей системе).
- PTS: pts обозначает pseudo terminal slave. Это терминальное устройство, которое эмулируется другой программой (например, сессией ssh в вашей системе).
2) Как убить пользовательские сессии в Linux с помощью команды Killall
Вы можете убить пользовательский сеанс следующим образом с помощью команды killall.
В моем случае я убиваю сеанс пользователя «magesh» с помощью ключа «-u».
3) Как убить пользовательские сессии в Linux с помощью команды Kill
Кроме того, вы можете убить пользовательский сеанс с помощью команды kill.
Этот метод потребует нескольких дополнительных шагов по сравнению с вышеупомянутыми двумя методами, потому что вы не сможете убить сессию напрямую.
Сначала найдите номер tty сеанса пользователя из вывода команды w.
Как только он у вас есть, найдите PID соответствующего сеанса tty с помощью команды PS.
Наконец убейте идентификатор процесса сеанса.
WebLampa
Освещаю, не отсвечивая))
Рубрики
Свежие записи
Как завершить сеанс другого пользователя в системе Linux/BSD
Иногда бывает необходимо завершить сеанс какого-либо пользователя. Причины на то бывают разные и мы их рассматривать не будем.
Первым делом нужно узнать кто в данный момент находится в системе.
Говорим системе
who
и получаем примерно такой ответ
root tty1 2010−04−06 10:26
vasyapupkin :0 2010−04−06 09:49
vasyapupkin pts/0 2010−04−06 09:49 (:0)
root pts/3 2010−04−06 10:41 (192.168.1.10)
tty — это локальные консоли
pts — псевдотерминалы.
Для pts в скобках может указываться адрес с которого производится подключение.
Мы узнали кто в системе, теперь попробуем завершить удаленный сеанс, pts/3.
Находим pid процесса
ps -A|grep pts/3
и получаем что-то вроде этого
6354 pts/3 00:00:00 bash
6408 pts/3 00:00:00 mc
Можно прибить одну запущенную программу или оболочку со всеми дочерними процессами.
Раз задача была завершить сеанс пользователя, то убиваем оболочку.
Завершить сессию другого пользователя.
killall -u user -15
killall -u user -9
Как-то слишком очевидно и жестоко.
Ведь завершает кто-то же сессию по нажатию кнопки «Завершить сеанс. » в Ubuntu например.
Кто? Как?
Хорошо — пусть только гномовскую. Но завершить-то как? То что делает это gnome-session вроде да — ясно. А как его потдтолкнуть к этой мысли не заходя в графический сеанс пользователя?
Дома я неоригинален:
А если попробовать
su -l имя_пользователя
>по wall посылаю предупреждение
А его видно пользователям X?
Не, в Иксах не видно. Для иксов xmessage, но для этого надо в иксах стать этим пользователем.
** (gnome-session-save:6701): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
Тут вот какое дело — домочадцы не разлогиниваются после того как поюзают домашнюю машину. А когда у дочери открыт и стоит на паузе Totem, а у жены открыта Opera с десятком вкладок, пашет Beagle и Deluge, то в Nexuiz уже играть не очень комфортно.
Заходить и разлогинивать их руками лень. Какой бы скриптик написать, что бы запустил и остался в одиночестве, хотя бы на компьютере )))
Кстати, а как вы боретесь с кодировкой в xmessage — у меня русские буквы не отображаются. У Убунтологов есть notify-send конечно, но хотелось бы общих решений.
Мои юзеры english знают) Встречались скрипты на перле использующие libnotify. Можно рыть в эту сторону.
ну найти и убить все процессы с uid больше 1000 кроме (туту чписок исключений), что сложного?
>Кстати, а как вы боретесь с кодировкой в xmessage — у меня русские буквы не отображаются. У Убунтологов есть notify-send конечно, но хотелось бы общих решений.
1) использовать KOI8-R+фонт соответствующий.
2) использовать gmessage, gxmessage.
Зачем -15, зачем -9? Просто килл ит виз файр. мягко и безболезненно. Остальные если что потом видишь, сделаешь контрольный с -KILL
ну или kdialog, ежели кеды. Русский понимают (в UTF)
unixforum.org
Форум для пользователей UNIX-подобных систем
Консольная команда завершение сеанса пользователя
Модератор: SLEDopit
Консольная команда завершение сеанса пользователя
Сообщение vlav » 13.03.2010 16:05
Re: Консольная команда завершение сеанса пользователя
Сообщение SLEDopit » 13.03.2010 16:57
(no confirmation, no shutdown/logout only, force now) — что значат цифры
Или, если нужно вырубить иксы вообще, то добавляем в sudo юзеру разрешения на k(g,x,etc)dm и
Re: Консольная команда завершение сеанса пользователя
Сообщение vlav » 14.03.2010 03:00
Re: Консольная команда завершение сеанса пользователя
Сообщение SLEDopit » 14.03.2010 03:41
Re: Консольная команда завершение сеанса пользователя
Сообщение zombie » 14.03.2010 10:27
Re: Консольная команда завершение сеанса пользователя
Сообщение vlav » 14.03.2010 11:06
/usr/bin/killall -9 -u user
реально все убивает, но корректно конечно не завершает
Re: Консольная команда завершение сеанса пользователя
Сообщение BIgAndy » 14.03.2010 12:53
Вместо SigKill импользутей SigTerm. Будет удивать корректнее.
Хотя за три года использования особых проблем с таким (sigkill) завершением замечено не было.
Зы. Смежный вопрос: Как кто отслеживает активность пользователя и в случае ее отсутствия (событий клавиатуры или мыши) прибивать процессы пользователя?
Как завершить сессию пользователя на терминальном сервере
Как завершить сессию пользователя на терминальном сервере
Добрый день! Уважаемые читатели и гости IT портала Pyatilistnik.org. Вчера я вас научил определять номер и ID сеанса пользователя на RDS ферме или терминальном сервере. Там я вам рассказывал, что это нужно в случаях, когда вам необходимо завершить сессию пользователя, по ряду причин, одна из таких, это просто ее зависание. После чего человек и подключиться не может заново и не может выйти из своего сеанса. Вы как администратор, должны уметь решать проблему с зависшими RDP сессиями, ниже я покажу свои методы и алгоритмы.
Описание проблемы
Есть RDS ферма из 15 хостов подключений на Windows Server 2012 R2. Сервера на то они и сервера, что работают постоянно. Если у вас на ферме не настроены тайм ауты времени беспрерывной работы, то пользователи могут неделями или месяцами висеть в авторизованных подключениях. Логично предположить, что это не очень хорошо и ведет к различным последствиям, одно из которых, это полное зависание сеанса, при котором человек не может подключиться к терминальному серверу и видит сообщение «Работает служба профилей пользователей» или еще вариант «Не удается завершить требуемую операцию», я уже не говорю про повреждение пользовательского профиля. В результате того, что RDS брокеры видят. что пользователь уже залогинен, они не дают ему переподключиться к другому Session Host серверу, даже если вы закроете на текущем новые подключения. Пока вы не сделаете выход пользователя из системы для этой сессии, она так и будет мешать. Давайте разбираться, как это делать.
Методы завершения сессии пользователя не терминале
Существует несколько методов позволяющие выкинуть пользователя с сервера.
- Завершить сессию пользователя (Сделать log off) вы можете из оснастки управления RDS фермой
- Разлогинить пользователя можно и на самом терминальном сервере из диспетчера задач
- Выход пользователя можно выполнить из утилиты командной строки rwinsta
- Утилита командной строки log off
- Утилита reset session
- * Командлет Stop-TSSession
Как выкинуть пользователя из оснастки управления RDS
И так, у меня есть мой любимый, тестовый пользователь в Active Directory, по имени Барбоскин Геннадий Викторович. Предположим, что он зашел на терминальный стол и нам по причине зависания его сессии, нужно сделать ему выход. Первый метод, это использование оснастки по управлению RDS фермой, я вам рассказывал, как ее собирать. Открываем раздел с вашей коллекцией RDS фермы. В поисковом фильтре указываем логин или фамилию нужного сотрудника. В результате получаем хост, где он работает.
Щелкаем по нему правым кликом. В контекстном меню будет пункт «Выйти», это и соответствует завершению сессии (Log off). Так же есть пункт «Отключиться», если выберите его, то пользователь будет выброшен с терминального сервера, но его сессия останется на нем, данная операция равносильна тому, если пользователь просто нажал в окне с названием терминального сервера крестик.
После того, как вы выбрали пункт «Выйти», начнется корректное завершение сессии пользователя на RDS ферме. Сам пользователь увидит сообщение «Работает служба профилей пользователей» и у него закроется окно без ошибки.
Второй метод разлогинить пользователя на терминальном сервере
Второй метод, похож на первый, за исключением того, что нам необходимо залогиниться на нужный сервер, открыть оснастку «Диспетчер задач» и уже из него произвести выход пользователя. Сказано сделано, о том, как вам попадать на нужного участника RDS фермы я рассказывал. Далее щелкаем правым кликом по области пуска и из контекстного меню выбираем пункт «Диспетчер задач». Кстати, вызвать «Диспетчер задач» можно и через сочетание клавиш CTRL+SHIFT+ESC.
Находим нужного нам пользователя и щелкаем по нему правым кликом, в контекстном меню. нас будет интересовать пункт «Выйти». Выбираем его и завершаем сессию пользователя.
Использование утилиты RWINSTA
Если вы попали в ситуацию, когда графические методы не позволяют вам произвести выход пользователя из системы, а это необходимо, то вам на помощь придут утилиты из командной строки. RWINSTA — это встроенная в Windows утилита, которая позволяет сбрасывать сессии, по ID и имени сеанса. Первым делом вам нужно вычислить или ID сессии или ее имя, я вам рассказывал, о всех известных мне методах. можете ознакомиться. Я выберу утилиту qwinsta. Пишем команду:
или удаленно qwinsta /server:имя сервера | findstr barboskin.g
В моем примере имя сеанса rdp-tcp#172 и ее ID 515. Пишем команду:
И в первом и во втором случае, пользователь будет разлогинен с данного сервера. Данную команду можно запускать удаленно, со своего рабочего места, главное, чтобы были права на log off. Данный метод меня ни раз выручал в моей практике, например случай с зависшей сессией на Windows Server 2016, где вместо логина пользователя было имя (4).
Как отключить пользователя через reset session
Завершить сессию пользователя можно и с помощью утилиты командной строки Reset Session. В текущем примере у моего Барбоскина Геннадия Викторовича имя сеанса rdp-tcp#16 с его ID 11. Данную утилиту можно применять как локально на самом терминальном сервере, так и на своей рабочей станции, тут так же есть ключ /server.
Подробнее про утилиту reset session вы можете почитать на сайте Microsoft — https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reset-session
Как отключить пользователя через logoff
Разлогинить пользовательскую учетную запись и даже зависшую, можно и через утилиту командной строки «LogOff». В данном примере у Геннадия Барбоскина имя сессии rdp-tcp#43. В командной строке от имени администратора введите:
Выход пользователя через командлет Stop-TSSession
Есть такой замечательный командлет Stop-TSSession. Посмотрим на сервере ID и имя сеанса, для этого в открытой оболочке PowerShell введите:
В итоге я вижу, что у пользователя barboskin.g SessionID 3. Далее пишем
Соглашаемся с тем, что будет производиться log off для данного пользователя. Проверяем, что сессия завершена. Можно вот таким простеньким скриптом из планировщика задач, разлогинивать сессии:
Выход пользователя через командлет Stop-TerminalSession
Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:
Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.