1

Я вошел в машину и ввел:

insite1@POC-Messaging1:/opt/insiteone/log> last -a | grep "logged"
insite1  pts/6        Tue Jul 30 03:59   still logged in    160.110.5.210
root     pts/5        Tue Jul 30 02:28   still logged in    160.110.154.231
root     pts/4        Tue Jul 30 02:26   still logged in    160.110.154.231
root     pts/0        Tue Jul 30 02:18   still logged in    160.110.5.210
root     pts/3        Tue Jul 30 02:13   still logged in    160.110.5.210
root     pts/2        Tue Jul 30 01:00   still logged in    160.110.154.231
root     pts/1        Tue Jul 30 00:47   still logged in    160.110.154.231

Я хочу убить других, кроме пользователя, вошедшего в систему с 160.110.5.210. Как это сделать?

2 ответа2

4

Самым чистым способом уничтожения сеанса входа в систему терминала является отправка сигнала SIGHUP всем процессам - сигнал "зависания", который также будет отправлен после закрытия окна терминала или соединения SSH.

pkill -HUP -t pts/1

Использовать pgrep или pkill проще, чем ps|grep|grep|grep|grep|grep|grep .

Если вы хотите написать скрипт:

for tty in $(who | awk '$1 == "root" {print $2}'); do
    test $tty = ${thistty=$(tty)} || pkill -HUP -t $tty
done
3

Отказ от ответственности: если вы исключите пользователя root, он может выполнить важную задачу восстановления или запустить длительный процесс, который важен, бла-бла, так что действуйте на свой страх и риск и т.д.

Таким образом, вы можете получить идентификатор процесса для всех этих сеансов с

ps aux | grep pts .

Более уродливая команда, которая выдает лучший результат (для меня на Debian)

ps aux | grep sshd | grep pts | grep -v grep

Теперь вы можете sudo kill 1234 где 1234 - это PID сеансов PTS.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .