sed 是提取数字并将其作为正在构建的命令行的一部分的方法吗?

sed 是提取数字并将其作为正在构建的命令行的一部分的方法吗?

/etc/knockd.conf“我想要一个命令,它将是一个ufw insert [line number]...命令”中,行号是动态的,可以通过查找命令输出ALLOW中的第一个出现来获取ufw status numbered。我已经到了这一步

ufw status numbered|sed -n '/ALLOW/p'|sed q|sed 's/].*//'|sed 's/\(\[\)//g'

它会产生我需要的数字。这个数字需要成为命令的中间部分ufw insert,以便动态(虚拟地)生成此命令:

ufw insert 5 allow from %IP% to any; ufw reload

以上是ufw status 输出中5第一行的示例行号。实际上是所需的虚拟命令。ALLOW%IP%

因此我认为命令行将以 ufw status 和 sed 命令组合开头,该组合产生行号,并以某种方式构造虚拟命令并将编号赋给它。别忘了虚拟命令以 ufw reload 命令结尾。

这些都是家庭监控系统的一部分,无头服务器运行 Ubuntu 15.04。我之所以选择它,knockd是因为我见过的防火墙黑名单制作者在第一次探测时不会抓住罪犯并将其列入黑名单。使用 knockd,我可以设置一条/etc/knockd.conf规则来根据一次点击将罪犯的 IP 列入黑名单在我的端口 22、80、443 上,无论我想要什么。我的 ufw 规则有三个部分:

  1. 拒绝列入黑名单的犯罪者的单个 IP(通过ufw insert 1 deny from %IP% to any; ufw reload中的命令创建自己/etc/knockd.conf),
  2. 允许成功敲门者的单个 IP(来自我的位置,这是我需要帮助的命令,因为它必须插入到列入黑名单的罪犯之后的动态计算行中),
  3. 两个覆盖全球的静态否认。

答案1

尝试这个:

ufw insert $(sed -n '/ALLOW/{s/^.*ALLOW *\[ *\([0-9]\+\).*$/\1/;p;q}' <(ufw status numbered)) allow from '%IP%' to any; ufw reload

相关内容