示例1:对新安装的linux系统初始化,要求创建用户、修改内核参数(最大文件打开数)、增加系统启动自动加载项(自动启动ssh 222端口);并对以上进行校验检查。
#!/usr/bin/bash
#Author:teng
#Blog:https://blog.youkuaiyun.com/weixin_45961525
#Time:2021-01-27 17:18:54
#Name:start.sh
#Version:V1.0
#Description:This is a test script.
#对新安装的linux系统初始化,要求创建用户、修改内核参数(最大文件打开数)、增加系统启动自动加载项(自动启动ssh 222端口);并对以上进行校验检查。
echo "-------------系统初始化中-------------"
for i in `seq 3`
do
useradd sys$i
if [ $? -eq 0 ];then
echo "sys$i创建成功"
fi
done
#系统最大打开文件描述符数:/proc/sys/fs/file-max 内核可分配的最大文件句柄数
#单个进程可分配的最大文件数:/proc/sys/fs/nr_open 单个进程可分配的最大文件句柄数
#参数大小关系: soft limit < hard limit < nr_open < file-max
cat /etc/sysctl.conf |grep -o fs.file-max &> /dev/null
A=`echo $?`
cat /etc/sysctl.conf |grep -o fs.nr_open &> /dev/null
B=`echo $?`
if [ $A == 0 -a $B == 0 ];then
echo "内核参数已修改"
else
echo "fs.nr_open=1048576" >> /etc/sysctl.conf
echo "fs.file-max=95345" >> /etc/sysctl.conf
sysctl -p &> /dev/null
echo "内核参数已生效"
fi
cat /etc/ssh/sshd_config |grep -o -i "port=222" &> /dev/null
C=`echo $?`
if [ $C == 0 ];then
echo "ssh222端口已经添加过了"
systemctl enable sshd
echo "已成功加入开机自启"
else
echo "Port=222" >> /etc/ssh/sshd_config
echo "ssh222端口已添加"
echo "------正在重新启动SSH服务-------"
systemctl restart sshd
sleep 2
echo "------ssh服务启动完成-------"
systemctl enable sshd
echo "已成功加入开机自启"
fi
echo "------------系统初始化完成-------------"
示例2:linux操作系统的多台服务器,可以通过shell脚本进行批量部署防火墙策略。
创建hosts文件里面加入IP地址
#!/usr/bin/bash
#Author:teng
#Blog:https://blog.youkuaiyun.com/weixin_45961525
#Time:2020-12-27 15:36:15
#Name:expect_test.sh
#Version:V1.0
#Description:This is a test script.
#执行检测并安装expect模块
expect=`rpm -qa |grep expect`
if [ -z $expect ];then
echo "检测到你未安装expect模块,现在进行安装。。。"
sleep 1
yum install expect -y
else
echo "您已安装expect模块,接下来进行公钥分发"
sleep 1
fi
cat hosts | while read host
do
echo "向$host上传输ssh文件"
/usr/bin/expect <<-EOF
spawn scp -r /root/.ssh/ $host:/root
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password" { send "111111\r"; exp_continue }
}
expect eof
EOF
echo "传输完成"
echo "--------$host主机正在进行公钥认证-------"
sleep 1
/usr/bin/expect <<EOF
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $host
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "111111\r"; exp_continue }
}
EOF
echo "公钥认证完成!!"
done
echo "接下来进行防火墙的规则分发"
cat hosts | while read ip
do
/usr/bin/expect <<EOF
spawn ssh root@$ip
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "111111\r"; exp_continue }
}
expect "*]#"
send "iptables -F\r"
expect "*]#"
send "iptables -t filter -I INPUT -m iprange --src-range 192.168.79.100-192.168.79.175 -j DROP\r"
expect "*]#"
send "date\r "
expect "*]#"
send "exit\r"
expect eof
EOF
done
echo "防火墙规则配置完成"