阿里云主机

万维景盛

万维景盛官网
已解决:怎样在linux系统写一个用php自动运行sh命令的程序脚本?

怎样在linux系统写一个用php自动运行sh命令的程序脚本?万维景盛工程师为您分享一段脚本,供您参考。

1、编写脚本,将 ssh 登录失败次数超过 3 次的 ip 直接加入 hosts.deny 文件

/data/sciprt/denyHost.sh


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
#Denyhosts SHELL SCRIPT
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/denyHost.txt
DEFINE="3"
for i in `cat /root/denyHost.txt`
do
 IP=`echo $i|awk -F= '{print $1}'`
 NUM=`echo $i|awk -F= '{print $2}'`
 if [ $NUM -gt $DEFINE ]
 then
 ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
 if [ $ipExists -lt 1 ]
 then
 echo "sshd:$IP" >> /etc/hosts.deny
 fi
 fi
done

 
2、创建脚本执行文件 /data/script/denyHost.php


1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

declare(strict_types = 1);

class DenyHost

{

 public function index()

 {

 $shell = 'sh /data/script/denyHost.sh';

 shell_exec($shell);

 }

}

swoole_timer_tick(500, function ($timerId) {

 (new DenyHost())->index();

});

3、添加记录文件


1
2
cd ~
touch denyHost.txt

4、给予sh脚本权限


1
2
cd /data/script
chmod 777 denyHost.sh

5、运行php脚本


cd /data/script 
php denyHost.php

目前是可以随时ctrl c 打断这个脚本执行的,我们可以在后台运行这个php脚本


nohup php /data/script/denyHost.php &


6、如果要结束这个php脚本在后台运行


# 找到这个php脚本的pid 

ps -a | grep php


# 返回结果 

381 pts/0 00:00:00 php 
kill -9 381


说明:这里使用的是swoole的毫秒定时器,较之 linux 自带的 crontab 定时任务,好处在于,swoole 的毫秒定时器最小单位可以是毫秒,而 crontab 最小单位是每分钟,实现防暴力破解并不理想。

 

7、验证效果


cat -n /etc/hosts.deny




< 购物车 > 会员 客服 充值 工单
Top

客服热线

010-80253326

18610695105

客服QQ

请拨总机 010-80253326

咨询售后问题建议 提交工单