Как я могу передать информацию pid ss в kill - PullRequest
0 голосов
/ 20 февраля 2020

Я работаю на сервере приложений Linux, который должен иметь возможность уничтожать все входящие соединения S SH с указанных IP-адресов или адресов c.

Я могу использовать ss вывести список входящих S SH соединений с помощью

sudo ss -p | grep -i -c -E 'ssh.*${host}'

, который выдает вывод, похожий на

tcp    ESTAB    0        60              xxx.xxx.xxx.111:ssh        my.server.ip:64938          users:(("sshd",pid=2089
,fd=3),("sshd",pid=2038,fd=3))

. Это показывает, что клиент .111 имеет два открытых сокета S SH с PID 2089 и 2038. Но формат выглядит просто как текст с некоторыми скобками.

Как я могу передать или передать эти PID в kill, чтобы я мог завершить эти указанные c процессы sshd, но оставить другие процессы sshd открытыми?

Сервер приложений работает на узле .

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Это решение основано на ответе @ marekful.

Его решение захватило только первый pid каждого ss вывода, но каждое соединение может иметь один или несколько связанных pids. Чтобы получить их все, я использовал следующий код:

sudo ss -p 
   | grep -i  -E 'ssh.*.111' 
   | gawk '{ 
       while (match($0, /pid=([0-9]+)/, ary)) {
          print 'killing', ary[1]; 
          system("sudo kill -9 " ary[1]);
          $0 = substr($0, RSTART + RLENGTH);
       } 
     }'
0 голосов
/ 20 февраля 2020

Вы можете использовать awk и его встроенную функцию system():

ss -p | grep :ssh | awk -F, '{print $2 }' | awk -F= '{system("kill -9 " $2) }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...