- Рабочий метод разрыва конкретного активного соединения из командной строки linux (drop/kill/cut/close ESTABLISHED connection)
- Как выйти из SSH-соединения?
- 8 ответов
- Символ SSH Escape и последовательность разъединения
- Другие escape-последовательности
- Завершить сессию другого пользователя.
- Как убить все процессы пользователя в Linux
- Как завершить все процессы пользователя?
- 🐧 Как убить сессии пользователей на Linux
- Как посмотреть активные сессии ssh?
- 1) Как убить пользовательские сессии в Linux с помощью команды pkill
- В чем разница между tty и pts?
- 2) Как убить пользовательские сессии в Linux с помощью команды Killall
- 3) Как убить пользовательские сессии в Linux с помощью команды Kill
Рабочий метод разрыва конкретного активного соединения из командной строки linux (drop/kill/cut/close ESTABLISHED connection)
Иногда бывает необходимо принудительно разорвать активное соединение. Самый распространенный способ:
netstat -na
kill PID
Проблема в том, что один воркер может одновременно обслуживать несколько соединений, поэтому правильнее будет убить соединение а не воркер. Для этого на многих форумах рекомендуют использовать tcpkilll, cutter или awk+hping3. Однако, хоть эти утилиты и находятся в официальных репозиториях, мне не удалось заставить их разрывать соединения.
После продолжительных поисков был обнаружен perl скрипт killcx, разрывающий соединение по удаленному хосту и порту.
killcx 94.133.119.242:4403
[PARENT] checking connection with [94.133.119.242:4403]
[PARENT] found connection with [78.220.184.126:80] (ESTABLISHED)
[PARENT] forking child
[CHILD] interface not defined, will use [eth0]
[CHILD] setting up filter to sniff ACK on [eth0] for 5 seconds
[CHILD] hooked ACK from [77.220.184.126:80]
[CHILD] found AckNum [3091573605] and SeqNum [3105164779]
[CHILD] sending spoofed RST to [78.220.184.126:80] with SeqNum [3091573605]
[CHILD] sending RST to remote host as well with SeqNum [3105164779]
[CHILD] all done, sending USR1 signal to parent [13723] and exiting
[PARENT] received child signal, checking results.
=> success : connection has been closed !
Для его работы требуется целый набор библиотек.
apt-get install \
libpcap0.8 \
libpcap-dev \
libnet-pcap-perl \
libyaml-perl \
libyaml-dev \
libyaml-0-1 \
-y
cpan -i \
Net::RawIP \
NetPacket::Ethernet
Источник
Как выйти из SSH-соединения?
Я подключаюсь к серверу через SSH для отправки сообщения на сервер сокетов с помощью команды типа:
После того, как соединение установлено, и я напишу сообщение и отправлю его, я не могу выйти из текстового режима. Мне разрешено вводить больше текста, и это возможно.
Есть ли команда или комбинация клавиш, которая позволяет мне вернуться в командный режим?
8 ответов
Как выйти из SSH-соединения?
- закрытие сеанса оболочки, например. с exit , а затем Enter или Ctrl — d обычно позволяет выйти из ssh обычно,
- в случае, если у вас плохое соединение, и оболочка не отвечает, нажмите клавишу Enter , затем введите
. и ssh должен немедленно закрыть и вернуть вас в командной строке.
Первый вариант должен быть интуитивным, но как узнать последний вариант?
Мы могли бы изучить эту информацию, внимательно прочитав страницу руководства.
дает нам документацию по SSH , в которой содержится следующий раздел о escape-символах:
Короткий ответ: Введите exit
Если это не работает, однако .
Символ SSH Escape и последовательность разъединения
Большинство реализаций SSH реализуют escape-символ для интерактивных сеансов, аналогичный комбинации telnet Ctrl-] . Эквивалентный символ SSH по умолчанию —
, введенный в начале строки.
Если вы хотите завершить интерактивный сеанс OpenSSH , который застрял и не может быть завершен, введя exit или Ctrl D в оболочку на удаленной стороне , вы можете ввести
, а затем dot . . Чтобы ввести escape-символ в начале строки ввода, сначала необходимо нажать Enter. Таким образом, следующая последовательность в большинстве случаев прекратит сеанс SSH:
Другие escape-последовательности
OpenSSH, например, предлагает другие escape-последовательности помимо
? во время сеанса должен предоставить вам список. Некоторые примеры:
follow Ctrl-Z приостанавливает сеанс,
& помещает его прямо в фоновый режим,
# предоставляет список переадресованных соединений в этом сеансе.
Если вы хотите просто ввести тильду в начале строки, вам нужно удвоить ее:
Эквивалентный символ можно изменить с помощью опции командной строки -e . Если вы установите специальное значение -e none , экранирование будет отключено и сеанс будет полностью прозрачным.
Вы хотите выйти из оболочки SSH?
Вы можете ввести exit и нажать Enter или использовать Ctrl + D
Просто введите exit или logout (тогда нажмите Enter, конечно), оба будут работать.
Вы можете написать logout в строке консоли (и нажмите Enter , конечно).
Я вижу, что вопрос адекватно ответил, но я хотел бы добавить, что вижу, что вы подключаетесь к этому серверу через ssh на порту 5566. Я читаю один раз на этот сайт , сообщающий через SSH о непривилегированных порты (все выше 1023) небезопасны.
Когда вы регистрируетесь в системе как пользователь без полномочий root (кто-то не является uid 0), вы не можете создать список TCP или UDP-портов ниже 1024. Это связано с тем, что номера портов ниже 1024 являются так называемыми привилегированные порты и могут открываться только root или процессы, выполняемые как root. Например, когда ваш веб-сервер (apache, nginx и т. Д.) Запустится, он сделает это как привилегированный пользователь root, чтобы открыть прослушивающее соединение с портом 80 (порт, который по умолчанию будет использоваться для HTTP-трафика). Теперь, как только порт будет открыт, и все, что нужно сделать с правами root, будет выполнено, веб-сервер вернется к не-привилегированному пользователю (либо www-data, apache, либо никому). С этого момента, когда происходит что-то плохое, оно ограничено только правами, которые имеет этот пользователь. Теперь вернемся к SSH: когда мы запускаем SSH на порте 22, мы знаем, что это делается с помощью корневого или корневого процесса, поскольку никакой другой пользователь не может открыть этот порт. Но что произойдет, когда мы переместим SSH на порт 2222? Этот порт можно открыть без привилегированной учетной записи, что означает, что я могу написать простой скрипт, который прослушивает порт 2222 и имитирует SSH, чтобы захватить ваши пароли.
Поэтому, когда я сам меняю порт, я всегда использую порт ниже 1024, который еще не используется другим стандартным программным обеспечением. Для этого есть хороший список Wikipedia .
Автор статьи также считает, что изменение порта SSH не должно быть сделано вообще по соображениям совместимости.
Другая проблема: у многих корпораций есть входящие и исходящие брандмауэры, то есть вы не можете перейти на какой-либо сайт к произвольному порту и ожидать, что он будет работать. Некоторые защищенные порты, такие как порт 22, часто освобождаются от этого, в то время как другие порты, такие как порт 25 или 110, блокируются.
Я лично считаю, что есть случаи, когда это пригодится. Например, когда вы или небольшая группа людей являются единственными, кто подключается к серверу через SSH, вы регистрируете автоматические атаки с использованием грубой силы, и вы хотите, чтобы журнал был чистым.
Это поддерживаемые символы, которые предоставляют различные варианты, с которыми вы можете играть с помощью ssh.
(Обратите внимание, что escape-коды распознаются только сразу после новой строки.) Вы можете закрыть список последовательностей Escape, нажав Enter .
MacOS : когда ssh зависает, используйте следующую последовательность:
Источник
Завершить сессию другого пользователя.
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)
Источник
Как убить все процессы пользователя в Linux
Как мы знаем, Linux — многопользовательская ОС, поэтому с каждым пользователем могут быть связаны его собственные процессы. Такое разделение существует в целях безопасности. Запуская ту или иную программу от имени непривилегированного пользователя, ОС снижает риски несанкционированного проникновения и риски повреждения системных файлов.
В этой статье мы расскажем о том, как завершить все запущенные процессы конкретного пользователя.
Как завершить все процессы пользователя?
Для начала сформируем перечень всех процессов всех пользователей. В терминале Linux выполним следующую команду:
Как видно на скриншоте, имеются процессы, связанные с тремя пользователями (root, mint1 и mint). Допустим, нам срочно понадобилось завершить все процессы пользователя mint1.
Здесь следует немного подробнее остановиться на самом понятии процесса в Linux. Процесс – программа, запущенная в виртуальном адресном пространстве. Каждый процесс имеет свой уникальный номер или идентификатор — PID (Process Identificator). Работая с процессами, операционная система идентифицирует процессы именно по PID.
Для того, чтобы убить ненужные процессы, достаточно убить все PID процессов конкретного пользователя (в данном случае mint1). Для этого можно просто скопировать номера идентификаторов этого пользователя и ввести следующую команду:
sudo kill -9 3501 4333
Однако, количество PID может быть куда больше двух. Да и выполнить все действия вообще-то тоже можно с помощью одной команды, умещающейся в одну строку.
Например, используем конвейер и программу grep ( символ | обозначает передачу результатов выполнения первой команды второй команде по конвейеру):
ps au | grep -e ‘^mint1’
С помощью grep были выбраны все процессы пользователя mint1. Далее необходимо из второй колонки слева выбрать все PID. Сделаем это с помощью программы awk, добавив, соответственно, ещё один конвейер:
ps au | grep -e ‘^mint1’ | awk ‘
Теперь нужно убить полученные значения PID. Опять добавим конвейер (в данном и последующих примерах все команды выполняются от имени суперпользователя root) и выполним группу команд:
ps au | grep -e ‘^mint1’ | awk ‘
С помощью такой конвейеризованной группы команд мы завершили все процессы пользователя mint1.
Подобный конвейер можно было бы сформировать и так:
ps aux | awk ‘/^mint1/
Кроме того, для того, чтобы убить все процессы пользователя в Linux, можно воспользоваться также следующими командами:
killall -u mint1
Однако и это ещё не всё. Нужно ещё проверить наличие процессов, связанных с пользователем mint1, и их состояние. Сделаем это с помощью команды:
Как видите, процессы, связанные с пользователем mint1, отсутствуют. Способов убить все процессы пользователя в Linux достаточно много, мы показали лишь некоторые из них.
Источник
🐧 Как убить сессии пользователей на 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.
Наконец убейте идентификатор процесса сеанса.
Источник