如何将ss的pid信息传递到kill

  • 本文关键字:kill 信息 pid ss node.js linux
  • 更新时间 :
  • 英文 :


我正在开发一个Linux应用程序服务器,该服务器需要能够终止来自一个或多个特定IP地址的所有入站SSH连接。

我可以使用ss通过列出入站SSH连接

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客户端有两个打开的SSH套接字,它们分别具有PID 2089和2038。但格式似乎只是带有一些括号的文本。

我如何将这些PID传递或管道传输到kill中,以便结束那些特定的sshd进程,但保持其他sshd进程打开?

应用程序服务器正在节点上运行。

您可以在system()函数中使用awk及其内部版本:

ss -p | grep :ssh | awk -F, '{print $2 }' | awk -F= '{system("kill -9 " $2) }'

此解决方案基于@marekful的答案。

他的解决方案只获取每个ss输出的第一个pid,但每个连接都可以有一个或多个关联的pid。为了获得所有这些,我使用了以下代码:

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);
} 
}'

最新更新