说明:
提前设置开放端口的列表,执行sh文件就会把设置未开放的端口,绿色打印出来,已经开放的端口会跳过,有打印提醒,开放完端口会打印已经开放的端口列表,并且会重启防火墙的服务。
使用管理员账号运行脚本比较好。
在Redhat Linux9上面跑过,其他版本的可能需要修改下使用防火墙的指令。
脚本执行展示
脚本文件 open_ports.sh
#!/bin/bash
echo off > /dev/null
# 需要开放的端口列表
# 端口说明:
# 22:开放访问端口
# 2881|2883:oceanbase数据库端口
# 3306:mysql数据库端口
# 80|8080:tomcat端口
# 8848:nacos端口
ports=(22 80-90 2881 2883 3306 8080 8848)
# 确保firewalld正在运行
systemctl is-active firewalld || { echo -e "\e[31mfirewalld服务未启动,请先使用指令:systemctl start firewalld 启动。\e[0m"; exit 1; } > /dev/null
#定义之前已经添加过端口的集合
addedList=()
# 为每个端口添加规则
for port in "${ports[@]}"; do
state=`firewall-cmd --query-port=${port}/tcp`
if [ "$state" != "yes" ]; then
firewall-cmd --permanent --add-port=${port}/tcp > /dev/null
firewall-cmd --reload > /dev/null
#绿色输出,添加的端口
echo -e "\033[32m添加端口为${port}的规则成功!!\033[0m"
else
addedList=(${addedList[*]} ${port})
continue
fi
done
if [ -n "#addedList[@]" ]; then
#黄色输出,定义的端口中已经添加过的端口
echo -e "\e[33m提醒消息,定义的端口中已经添加过的端口为:${addedList[*]}\e[0m"
fi
# 打印当前的开放的端口列表
firewall-cmd --list-ports > /dev/null
# 重启防火墙
firewall-cmd --reload > /dev/null
#注释:
# > /dev/null:忽略linux命令的执行结果
# echo off:忽略打印的执行结果
执行脚本指令
#新建文件,放任意位置
touch open_ports.sh
#编辑文件
vim open_ports.sh
......
#设置脚本文件可以执行
chmod +x open_ports.sh
#执行批量添加端口的脚本文件
./open_ports.sh
#删除开放的端口:91,需要重启防火墙
#sudo firewall-cmd --permanent --zone=public --remove-port=91/tcp
# 重启防火墙
#sudo firewall-cmd --reload
控制台打印颜色转义码
参考地址:linux环境中打印有颜色字体
\e[0m:默认
\e[31m:红色
\e[32m:绿色
\e[33m:黄色
\e[34m:蓝色
\e[35m:紫色
\e[36m:青色
\e[37m:白色
说明:
\e[0m 和 \033[0m 是一样的。
echo需要增加 -e 指令。
转义码需要一个默认颜色的结尾,否则后续打印都是设置的颜色。
问题
windows上传sh文件,赋予权限后不能执行
报错信息:linux 解释器错误: 没有那个文件或目录
原因:windows的换行符和Linux的换行符不一样
解决方式:
方式1、sed -i ‘s/\r$//’ open_ports.sh
方式2、进入指令模式,:set ff=unix
参考地址:linux报错 /bin/bash^M:解释器错误:没有那个文件或目录
使用XTerminal登录普通用户上传文件报错
报错信息:没权限
解决方式:使用root登录
注:切换用户依然不能上传,需要连接SSH的账号为root用户。
推荐
SSH连接工具:Xterminal
说明:
确实挺好用的。
可以白嫖,也可以vip个性化设置。
可以连接SSH、可视化上传/下载 文件、指令保存、AI小易辅助、指令历史记录等。
结尾
感谢参考过的文章,很多都没写出来,谢谢!!(◕ᴗ◕✿)