fix: Optimize script library scripts and execution methods (#8262)

This commit is contained in:
ssongliu 2025-03-26 18:07:35 +08:00 committed by GitHub
parent 220b6223a3
commit d4213daa58
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 144 additions and 541 deletions

View file

@ -147,9 +147,7 @@ func (b *BaseApi) RunScript(c *gin.Context) {
fileName := strings.ReplaceAll(scriptItem.Name, " ", "_") fileName := strings.ReplaceAll(scriptItem.Name, " ", "_")
quitChan := make(chan bool, 3) quitChan := make(chan bool, 3)
if currentNode == "local" { if currentNode == "local" {
tmpFile := path.Join(global.CONF.Base.InstallDir, "1panel/tmp/script") slave, err := terminal.NewCommand(scriptItem.Script)
initCmd := fmt.Sprintf("d=%s && mkdir -p $d && echo %s > $d/%s && clear && bash $d/%s", tmpFile, scriptItem.Script, fileName, fileName)
slave, err := terminal.NewCommand(initCmd)
if wshandleError(wsConn, err) { if wshandleError(wsConn, err) {
return return
} }

View file

@ -10,262 +10,112 @@ import (
func LoadScript() { func LoadScript() {
groups := []model.Group{ groups := []model.Group{
{Name: "install", Type: "script", IsDefault: false}, {Name: "install", Type: "script", IsDefault: false},
{Name: "uninstall", Type: "script", IsDefault: false},
{Name: "docker", Type: "script", IsDefault: false}, {Name: "docker", Type: "script", IsDefault: false},
{Name: "firewalld", Type: "script", IsDefault: false}, {Name: "firewall", Type: "script", IsDefault: false},
{Name: "ufw", Type: "script", IsDefault: false},
{Name: "supervisor", Type: "script", IsDefault: false}, {Name: "supervisor", Type: "script", IsDefault: false},
{Name: "clamav", Type: "script", IsDefault: false}, {Name: "clamav", Type: "script", IsDefault: false},
{Name: "ftp", Type: "script", IsDefault: false}, {Name: "ftp", Type: "script", IsDefault: false},
{Name: "fail2ban", Type: "script", IsDefault: false}} {Name: "fail2ban", Type: "script", IsDefault: false}}
_ = global.DB.Where("`type` = ?", "script").Delete(&model.Group{}).Error
_ = global.DB.Create(&groups).Error _ = global.DB.Create(&groups).Error
_ = global.DB.Where("is_system = ?", 1).Delete(model.ScriptLibrary{}).Error _ = global.DB.Where("is_system = ?", 1).Delete(model.ScriptLibrary{}).Error
list := []model.ScriptLibrary{ list := []model.ScriptLibrary{
{Name: "Install Docker", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[2].ID, groups[0].ID), Script: "bash <(curl -sSL https://linuxmirrors.cn/docker.sh)"}, {Name: "Install Docker", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[1].ID, groups[0].ID), Script: "bash <(curl -sSL https://linuxmirrors.cn/docker.sh)"},
{Name: "Install Firewalld", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[3].ID, groups[0].ID), Script: loadInstallFirewalld()}, {Name: "Install Firewall", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[2].ID, groups[0].ID), Script: loadInstallFirewall()},
{Name: "Uninstall Firewalld", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[3].ID, groups[1].ID), Script: loadUninstallFirewalld()},
{Name: "Install Ufw", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[4].ID, groups[0].ID), Script: loadInstallUfw()}, {Name: "Install Supervisor", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[3].ID, groups[0].ID), Script: loadInstallSupervisor()},
{Name: "Uninstall Ufw", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[4].ID, groups[1].ID), Script: loadUninstallUfw()},
{Name: "Install Supervisor", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[5].ID, groups[0].ID), Script: loadInstallSupervisor()}, {Name: "Install ClamAV", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[4].ID, groups[0].ID), Script: loadInstallClamAV()},
{Name: "Uninstall Supervisor", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[2].ID, groups[1].ID), Script: loadUninstallSupervisor()},
{Name: "Install ClamAV", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[6].ID, groups[0].ID), Script: loadInstallClamAV()}, {Name: "Install Pure-FTPd", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[5].ID, groups[0].ID), Script: loadInstallFTP()},
{Name: "Uninstall ClamAV", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[6].ID, groups[1].ID), Script: loadUninstallClamAV()},
{Name: "Install Pure-FTPd", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[7].ID, groups[0].ID), Script: loadInstallFTP()}, {Name: "Install Fail2ban", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[6].ID, groups[0].ID), Script: loadInstallFail2ban()},
{Name: "Uninstall Pure-FTPd", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[7].ID, groups[1].ID), Script: loadUninstallFTP()},
{Name: "Install Fail2ban", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[8].ID, groups[0].ID), Script: loadInstallFail2ban()},
{Name: "Uninstall Fail2ban", IsSystem: true, Groups: fmt.Sprintf("%v,%v", groups[8].ID, groups[1].ID), Script: loadUninstallFail2ban()},
} }
_ = global.DB.Create(&list).Error _ = global.DB.Create(&list).Error
} }
func loadInstallFirewalld() string { func loadInstallFirewall() string {
return `#!/bin/bash return `#!/bin/bash
# 检查是否具有 sudo 权限
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或以 root 用户运行此脚本"
exit 1
fi
# 检测操作系统类型 # 检测操作系统类型
if [ -f /etc/os-release ]; then if [ -f /etc/os-release ]; then
. /etc/os-release . /etc/os-release
OS=$ID OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息 OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else else
echo "无法检测操作系统类型" echo "无法检测操作系统类型"
exit 1
fi
# 安装 firewalld
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在安装 firewalld..."
apt-get update
apt-get install -y firewalld
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在安装 firewalld..."
yum install -y firewalld
else
echo "不支持的操作系统: $OS"
exit 1
fi
# 设置开机自启动并启动服务
if command -v systemctl &> /dev/null; then
echo "设置 firewalld 开机自启动..."
systemctl enable firewalld
echo "启动 firewalld 服务..."
systemctl start firewalld
if systemctl is-active --quiet firewalld; then
echo "firewalld 已成功安装并启动"
else
echo "firewalld 启动失败,请检查日志"
exit 1 exit 1
fi
else
echo "systemctl 不可用,请手动启动 firewalld"
exit 1
fi fi
# 放行 SSH 端口默认 22 # 安装防火墙
echo "在 firewalld 中放行 SSH 端口..." FIREWALL=""
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --reload
# 检查 SSH 端口是否放行
if firewall-cmd --zone=public --query-service=ssh &> /dev/null; then
echo "SSH 端口已成功放行"
else
echo "SSH 端口放行失败,请手动检查"
exit 1
fi
# 检查 firewalld 是否正常运行
if firewall-cmd --state &> /dev/null; then
echo "firewalld 安装完成并正常运行!"
else
echo "firewalld 安装或配置出现问题,请检查日志"
exit 1
fi
exit 0`
}
func loadUninstallFirewalld() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else
echo "无法检测操作系统类型"
exit 1
fi
# 停止 firewalld 服务
if command -v systemctl &> /dev/null; then
echo "停止 firewalld 服务..."
systemctl stop firewalld
systemctl disable firewalld
elif command -v service &> /dev/null; then
echo "停止 firewalld 服务..."
service firewalld stop
if command -v chkconfig &> /dev/null; then
chkconfig firewalld off
fi
else
echo "无法停止 firewalld 服务,请手动停止"
fi
# 卸载 firewalld
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在卸载 firewalld..." echo "检测到 Debian/Ubuntu 系统,正在安装 ufw..."
apt-get remove --purge -y firewalld FIREWALL="ufw"
apt-get autoremove -y apt-get update
apt-get install -y ufw
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在卸载 firewalld..." echo "检测到 Red Hat/CentOS 系统,正在安装 firewall..."
yum remove -y firewalld FIREWALL="firewalld"
yum autoremove -y yum update
yum install -y firewalld
else else
echo "不支持的操作系统: $OS" echo "不支持的操作系统: $OS"
exit 1 exit 1
fi fi
# 删除 firewalld 配置文件 read -p "请输入需要放行的端口(多个端口用空格分隔,如 80 443 22): " PORTS
echo "删除 firewalld 配置文件..."
rm -rf /etc/firewalld
rm -f /etc/sysconfig/firewalld
# 检查是否卸载成功 # 验证端口输入
if ! command -v firewall-cmd &> /dev/null; then if [ -z "$PORTS" ]; then
echo "firewalld 已成功卸载" echo "错误:未输入任何端口"
exit 1
fi
case $FIREWALL in
firewalld)
echo "配置firewalld..."
systemctl start firewalld
systemctl enable firewalld
for port in $PORTS; do
firewall-cmd --zone=public --permanent --add-port="$port/tcp"
done
firewall-cmd --reload
echo "已放行以下TCP端口: $PORTS"
;;
ufw)
echo "配置ufw..."
ufw --force enable
for port in $PORTS; do
ufw allow "$port/tcp"
done
echo "已放行以下TCP端口: $PORTS"
;;
esac
# 检查防火墙是否正常运行
if [ "$FIREWALL" = "firewalld" ]; then
if firewall-cmd --state &> /dev/null; then
echo "firewalld 安装完成并正常运行!"
else
echo "firewalld 安装或配置出现问题,请检查日志"
exit 1
fi
else else
echo "firewalld 卸载失败,请手动检查" if ufw status | grep -q "Status: active"; then
exit 1 echo "ufw 安装完成并正常运行!"
fi else
echo "ufw 安装或配置出现问题,请检查日志"
exit 0` exit 1
} fi
func loadInstallUfw() string {
return `
#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
else
echo "无法检测操作系统类型"
exit 1
fi
# 仅支持 Debian/Ubuntu 系统
if [ "$OS" != "ubuntu" ] && [ "$OS" != "debian" ]; then
echo "此脚本仅支持 Debian/Ubuntu 系统"
exit 1
fi
# 安装 ufw
echo "检测到 Debian/Ubuntu 系统,正在安装 ufw..."
apt-get update
apt-get install -y ufw
# 启用 ufw
echo "启用 ufw..."
ufw enable
# 放行 SSH 端口默认 22
echo "放行 SSH 端口22..."
ufw allow 22/tcp
# 检查 SSH 端口是否放行
if ufw status | grep -q "22/tcp"; then
echo "SSH 端口已成功放行"
else
echo "SSH 端口放行失败,请手动检查"
exit 1
fi
# 检查 ufw 是否正常运行
if ufw status | grep -q "Status: active"; then
echo "ufw 安装完成并正常运行!"
else
echo "ufw 安装或配置出现问题,请检查日志"
exit 1
fi
exit 0`
}
func loadUninstallUfw() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
else
echo "无法检测操作系统类型"
exit 1
fi
# 仅支持 Debian/Ubuntu 系统
if [ "$OS" != "ubuntu" ] && [ "$OS" != "debian" ]; then
echo "此脚本仅支持 Debian/Ubuntu 系统"
exit 1
fi
# 停止并禁用 ufw
echo "停止并禁用 ufw..."
ufw disable
# 卸载 ufw
echo "卸载 ufw..."
apt-get remove --purge -y ufw
apt-get autoremove -y
# 删除 ufw 配置文件
echo "删除 ufw 配置文件..."
rm -rf /etc/ufw
rm -f /etc/default/ufw
# 检查是否卸载成功
if ! command -v ufw &> /dev/null; then
echo "ufw 已成功卸载"
else
echo "ufw 卸载失败,请手动检查"
exit 1
fi fi
exit 0` exit 0`
@ -274,12 +124,6 @@ exit 0`
func loadInstallFTP() string { func loadInstallFTP() string {
return `#!/bin/bash return `#!/bin/bash
# 检查是否具有 sudo 权限
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或以 root 用户运行此脚本"
exit 1
fi
# 检测操作系统类型 # 检测操作系统类型
if [ -f /etc/os-release ]; then if [ -f /etc/os-release ]; then
. /etc/os-release . /etc/os-release
@ -308,37 +152,21 @@ fi
echo "配置 Pure-FTPd..." echo "配置 Pure-FTPd..."
PURE_FTPD_CONF="/etc/pure-ftpd/pure-ftpd.conf" PURE_FTPD_CONF="/etc/pure-ftpd/pure-ftpd.conf"
if [ -f "$PURE_FTPD_CONF" ]; then if [ -f "$PURE_FTPD_CONF" ]; then
# 备份原始配置文件 cp "$PURE_FTPD_CONF" "$PURE_FTPD_CONF.bak"
cp "$PURE_FTPD_CONF" "$PURE_FTPD_CONF.bak" echo "PureDB /etc/pure-ftpd/pureftpd.pdb" >> "$PURE_FTPD_CONF"
sed -i 's/^# UnixAuthentication/UnixAuthentication/' "$PURE_FTPD_CONF"
# 启用本地用户登录 echo "NoAnonymous yes" >> "$PURE_FTPD_CONF"
sed -i 's/^# UnixAuthentication/UnixAuthentication/' "$PURE_FTPD_CONF" echo "PassivePortRange 39000 40000" >> "$PURE_FTPD_CONF"
echo "ChrootEveryone yes" >> "$PURE_FTPD_CONF"
# 拒绝匿名登录 echo "VerboseLog yes" >> "$PURE_FTPD_CONF"
echo "NoAnonymous yes" >> "$PURE_FTPD_CONF"
# 启用被动模式
echo "PassivePortRange 30000 30100" >> "$PURE_FTPD_CONF"
# 限制用户访问家目录
echo "ChrootEveryone yes" >> "$PURE_FTPD_CONF"
# 启用日志记录
echo "VerboseLog yes" >> "$PURE_FTPD_CONF"
else else
echo "未找到 Pure-FTPd 配置文件,请手动配置" echo '/etc/pure-ftpd/pureftpd.pdb' > /etc/pure-ftpd/conf/PureDB
exit 1 echo yes > /etc/pure-ftpd/conf/VerboseLog
echo yes > /etc/pure-ftpd/conf/NoAnonymous
echo '39000 40000' > /etc/pure-ftpd/conf/PassivePortRange
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50puredb
fi fi
# 创建必要的目录和文件
echo "创建必要的目录和文件..."
mkdir -p /run/pure-ftpd
chown pure-ftpd:pure-ftpd /run/pure-ftpd
mkdir -p /var/log/pure-ftpd
chown pure-ftpd:pure-ftpd /var/log/pure-ftpd
touch /var/log/pure-ftpd/pure-ftpd.log
chown pure-ftpd:pure-ftpd /var/log/pure-ftpd/pure-ftpd.log
# 设置开机自启动并启动服务 # 设置开机自启动并启动服务
if command -v systemctl &> /dev/null; then if command -v systemctl &> /dev/null; then
echo "设置 Pure-FTPd 开机自启动..." echo "设置 Pure-FTPd 开机自启动..."
@ -358,82 +186,13 @@ else
exit 1 exit 1
fi fi
# 检查 Pure-FTPd 是否正常运行
if pure-ftpd --version &> /dev/null; then
echo "Pure-FTPd 安装完成并正常运行!"
else
echo "Pure-FTPd 安装或配置出现问题,请检查日志"
exit 1
fi
exit 0`
}
func loadUninstallFTP() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else
echo "无法检测操作系统类型"
exit 1
fi
# 停止 Pure-FTPd 服务
if command -v systemctl &> /dev/null; then
echo "停止 Pure-FTPd 服务..."
systemctl stop pure-ftpd
systemctl disable pure-ftpd
elif command -v service &> /dev/null; then
echo "停止 Pure-FTPd 服务..."
service pure-ftpd stop
if command -v chkconfig &> /dev/null; then
chkconfig pure-ftpd off
fi
else
echo "无法停止 Pure-FTPd 服务,请手动停止"
fi
# 卸载 Pure-FTPd
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在卸载 Pure-FTPd..."
apt-get remove --purge -y pure-ftpd
apt-get autoremove -y
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在卸载 Pure-FTPd..."
yum remove -y pure-ftpd
yum autoremove -y
else
echo "不支持的操作系统: $OS"
exit 1
fi
# 删除 Pure-FTPd 配置文件日志文件和用户数据库
echo "删除 Pure-FTPd 配置文件、日志文件和用户数据库..."
rm -rf /etc/pure-ftpd
rm -rf /var/log/pure-ftpd
rm -rf /var/lib/pure-ftpd
# 检查是否卸载成功
if ! command -v pure-ftpd &> /dev/null; then
echo "Pure-FTPd 已成功卸载"
else
echo "Pure-FTPd 卸载失败,请手动检查"
exit 1
fi
exit 0` exit 0`
} }
func loadInstallClamAV() string { func loadInstallClamAV() string {
return `#!/bin/bash return `#!/bin/bash
# ClamAV 安装配置脚本 # 检测操作系统类型
# 支持系统Ubuntu/Debian/CentOS/RHEL/Rocky/AlmaLinux
# 识别系统类型
if [ -f /etc/os-release ]; then if [ -f /etc/os-release ]; then
. /etc/os-release . /etc/os-release
OS=$ID OS=$ID
@ -546,85 +305,19 @@ setup_service() {
echo "正在安装 ClamAV..." echo "正在安装 ClamAV..."
install_clamav install_clamav
echo -e "\n\n配置 clamd..." echo -e "配置 clamd..."
configure_clamd configure_clamd
echo -e "\n\n配置 freshclam..." echo -e "配置 freshclam..."
configure_freshclam configure_freshclam
echo -e "\n\n设置服务..." echo -e "设置服务..."
setup_service setup_service
echo -e "\n\n安装完成!" echo -e "安装完成!"
echo 0` echo 0`
} }
func loadUninstallClamAV() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else
echo "无法检测操作系统类型"
exit 1
fi
# 停止 ClamAV 服务
if command -v systemctl &> /dev/null; then
echo "停止 ClamAV 服务..."
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
systemctl stop clamav-daemon
systemctl disable clamav-daemon
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
systemctl stop clamd@scan
systemctl disable clamd@scan
fi
elif command -v service &> /dev/null; then
echo "停止 ClamAV 服务..."
service clamav-daemon stop
if command -v chkconfig &> /dev/null; then
chkconfig clamav-daemon off
fi
else
echo "无法停止 ClamAV 服务,请手动停止"
fi
# 卸载 ClamAV
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在卸载 ClamAV..."
apt-get remove --purge -y clamav clamav-daemon
apt-get autoremove -y
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在卸载 ClamAV..."
yum remove -y clamav clamd clamav-update
yum autoremove -y
else
echo "不支持的操作系统: $OS"
exit 1
fi
# 删除 ClamAV 配置文件病毒数据库和日志文件
echo "删除 ClamAV 配置文件、病毒数据库和日志文件..."
rm -rf /etc/clamav
rm -rf /var/lib/clamav
rm -rf /var/log/clamav
rm -rf /var/run/clamav
rm -f /etc/cron.daily/freshclam
rm -f /etc/logrotate.d/clamav
# 检查是否卸载成功
if ! command -v clamscan &> /dev/null; then
echo "ClamAV 已成功卸载"
else
echo "ClamAV 卸载失败,请手动检查"
exit 1
fi
exit 0`
}
func loadInstallFail2ban() string { func loadInstallFail2ban() string {
return `#!/bin/bash return `#!/bin/bash
@ -656,15 +349,30 @@ fi
# 配置 fail2ban # 配置 fail2ban
echo "配置 fail2ban..." echo "配置 fail2ban..."
FAIL2BAN_CONF="/etc/fail2ban/jail.local" FAIL2BAN_CONF="/etc/fail2ban/jail.local"
if [ ! -f "$FAIL2BAN_CONF" ]; then LOG_FILE=""
echo "创建自定义配置文件 $FAIL2BAN_CONF..." BAN_ACTION=""
cat <<EOF > "$FAIL2BAN_CONF"
if systemctl is-active --quiet firewalld 2>/dev/null; then
BAN_ACTION="firewallcmd-ipset"
elif systemctl is-active --quiet ufw 2>/dev/null || service ufw status 2>/dev/null | grep -q "active"; then
BAN_ACTION="ufw"
else
BAN_ACTION="iptables-allports"
fi
if [ -f /var/log/secure ]; then
LOG_FILE="/var/log/secure"
else
LOG_FILE="/var/log/auth.log"
fi
cat <<EOF > "$FAIL2BAN_CONF"
#DEFAULT-START #DEFAULT-START
[DEFAULT] [DEFAULT]
bantime = 600 bantime = 600
findtime = 300 findtime = 300
maxretry = 5 maxretry = 5
banaction = $banaction banaction = $BAN_ACTION
action = %(action_mwl)s action = %(action_mwl)s
#DEFAULT-END #DEFAULT-END
@ -676,13 +384,10 @@ port = 22
maxretry = 5 maxretry = 5
findtime = 300 findtime = 300
bantime = 600 bantime = 600
banaction = $banaction banaction = $BAN_ACTION
action = %(action_mwl)s action = %(action_mwl)s
logpath = $logpath logpath = $LOG_FILE
EOF EOF
else
echo "自定义配置文件已存在,跳过创建"
fi
# 设置开机自启动并启动服务 # 设置开机自启动并启动服务
if command -v systemctl &> /dev/null; then if command -v systemctl &> /dev/null; then
@ -711,64 +416,6 @@ else
exit 1 exit 1
fi fi
exit 0`
}
func loadUninstallFail2ban() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else
echo "无法检测操作系统类型"
exit 1
fi
# 停止 fail2ban 服务
if command -v systemctl &> /dev/null; then
echo "停止 fail2ban 服务..."
systemctl stop fail2ban
systemctl disable fail2ban
elif command -v service &> /dev/null; then
echo "停止 fail2ban 服务..."
service fail2ban stop
if command -v chkconfig &> /dev/null; then
chkconfig fail2ban off
fi
else
echo "无法停止 fail2ban 服务,请手动停止"
fi
# 卸载 fail2ban
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在卸载 fail2ban..."
apt-get remove --purge -y fail2ban
apt-get autoremove -y
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在卸载 fail2ban..."
yum remove -y fail2ban
yum autoremove -y
else
echo "不支持的操作系统: $OS"
exit 1
fi
# 删除 fail2ban 配置文件和数据
echo "删除 fail2ban 配置文件和数据..."
rm -rf /etc/fail2ban
rm -rf /var/lib/fail2ban
rm -rf /var/log/fail2ban*
# 检查是否卸载成功
if ! command -v fail2ban-client &> /dev/null; then
echo "fail2ban 已成功卸载"
else
echo "fail2ban 卸载失败,请手动检查"
exit 1
fi
exit 0` exit 0`
} }
@ -833,63 +480,3 @@ fi
exit 0` exit 0`
} }
func loadUninstallSupervisor() string {
return `#!/bin/bash
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_LIKE=$(echo $ID_LIKE | awk '{print $1}') # 获取类似的发行版信息
else
echo "无法检测操作系统类型"
exit 1
fi
# 停止 Supervisor 服务
if command -v systemctl &> /dev/null; then
echo "停止 Supervisor 服务..."
systemctl stop supervisord
systemctl disable supervisord
elif command -v service &> /dev/null; then
echo "停止 Supervisor 服务..."
service supervisord stop
if command -v chkconfig &> /dev/null; then
chkconfig supervisord off
fi
else
echo "无法停止 Supervisor 服务,请手动停止"
fi
# 卸载 Supervisor
if [ "$OS" == "ubuntu" ] || [ "$OS" == "debian" ]; then
echo "检测到 Debian/Ubuntu 系统,正在卸载 Supervisor..."
apt-get remove --purge -y supervisor
apt-get autoremove -y
elif [ "$OS" == "centos" ] || [ "$OS" == "rhel" ] || [ "$OS_LIKE" == "rhel" ]; then
echo "检测到 Red Hat/CentOS 系统,正在卸载 Supervisor..."
yum remove -y supervisor
yum autoremove -y
else
echo "不支持的操作系统: $OS"
exit 1
fi
# 删除 Supervisor 配置文件日志文件和进程管理文件
echo "删除 Supervisor 配置文件、日志文件和进程管理文件..."
rm -rf /etc/supervisor
rm -rf /var/log/supervisor
rm -rf /var/run/supervisor
rm -f /etc/default/supervisor
rm -f /etc/init.d/supervisor
# 检查是否卸载成功
if ! command -v supervisorctl &> /dev/null; then
echo "Supervisor 已成功卸载"
else
echo "Supervisor 卸载失败,请手动检查"
exit 1
fi
exit 0`
}

View file

@ -25,20 +25,21 @@ type LocalCommand struct {
pty *os.File pty *os.File
} }
func NewCommand(initCmd string) (*LocalCommand, error) { func NewCommand(script string) (*LocalCommand, error) {
cmd := exec.Command("bash") cmd := exec.Command("bash")
if term := os.Getenv("TERM"); term != "" { if term := os.Getenv("TERM"); term != "" {
cmd.Env = append(os.Environ(), "TERM="+term) cmd.Env = append(os.Environ(), "TERM="+term)
} else { } else {
cmd.Env = append(os.Environ(), "TERM=xterm") cmd.Env = append(os.Environ(), "TERM=xterm")
} }
cmd.Env = append(cmd.Env, "INIT_SCRIPT="+script)
pty, err := pty.Start(cmd) pty, err := pty.Start(cmd)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to start command") return nil, errors.Wrapf(err, "failed to start command")
} }
if len(initCmd) != 0 { if len(script) != 0 {
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
_, _ = pty.Write([]byte(initCmd + "\n")) _, _ = pty.Write([]byte("bash -c \"$INIT_SCRIPT\"\n"))
} }
lcmd := &LocalCommand{ lcmd := &LocalCommand{

View file

@ -116,23 +116,19 @@ const handleBack = () => {
}; };
const handleBeforeClose = (done: () => void) => { const handleBeforeClose = (done: () => void) => {
console.log(drawerContent.value, drawerContent.value.querySelector('.el-form'));
if (drawerContent.value) { if (drawerContent.value) {
const hasForm = drawerContent.value.querySelector('.el-form') !== null; const hasForm = drawerContent.value.querySelector('.el-form') !== null;
if (hasForm) { const hasTerminal = drawerContent.value.querySelector('.terminal') !== null;
ElMessageBox.confirm( if (!hasForm && !hasTerminal) {
i18n.global.t('commons.msg.closeDrawerHelper'),
i18n.global.t('commons.button.close'),
{
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
},
).then(async () => {
done();
});
} else {
done(); done();
return;
} }
ElMessageBox.confirm(i18n.global.t('commons.msg.closeDrawerHelper'), i18n.global.t('commons.button.close'), {
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
}).then(async () => {
done();
});
} else { } else {
done(); done();
} }

View file

@ -1045,6 +1045,7 @@ const message = {
edit: 'Edit Script', edit: 'Edit Script',
groupHelper: groupHelper:
'Set different groups based on script characteristics, which allows for faster script filtering operations.', 'Set different groups based on script characteristics, which allows for faster script filtering operations.',
handleHelper: 'Execute script {1} on {0}, continue?',
}, },
}, },
monitor: { monitor: {

View file

@ -1004,6 +1004,7 @@ const message = {
edit: 'スクリプトを編集', edit: 'スクリプトを編集',
groupHelper: groupHelper:
'スクリプトの特徴に基づいて異なるグループを設定することでスクリプトのフィルタリング操作をより迅速に行うことができます', 'スクリプトの特徴に基づいて異なるグループを設定することでスクリプトのフィルタリング操作をより迅速に行うことができます',
handleHelper: '{0} {1} スクリプトを実行します続行しますか',
}, },
}, },
monitor: { monitor: {

View file

@ -998,6 +998,7 @@ const message = {
edit: '스크립트 수정', edit: '스크립트 수정',
groupHelper: groupHelper:
'스크립트 특성에 따라 다양한 그룹을 설정하여 스크립트 필터링 작업을 빠르게 수행할 있습니다.', '스크립트 특성에 따라 다양한 그룹을 설정하여 스크립트 필터링 작업을 빠르게 수행할 있습니다.',
handleHelper: '{0} 에서 {1} 스크립트를 실행합니다. 계속하시겠습니까?',
}, },
}, },
monitor: { monitor: {

View file

@ -1034,6 +1034,7 @@ const message = {
edit: 'Sunting Skrip', edit: 'Sunting Skrip',
groupHelper: groupHelper:
'Tetapkan kumpulan yang berbeza berdasarkan ciri skrip, yang membolehkan operasi penapisan skrip dilakukan dengan lebih pantas.', 'Tetapkan kumpulan yang berbeza berdasarkan ciri skrip, yang membolehkan operasi penapisan skrip dilakukan dengan lebih pantas.',
handleHelper: 'Akan melaksanakan skrip {1} pada {0}, teruskan?',
}, },
}, },
monitor: { monitor: {

View file

@ -1023,6 +1023,7 @@ const message = {
edit: 'Editar Script', edit: 'Editar Script',
groupHelper: groupHelper:
'Defina grupos diferentes com base nas características do script, o que permite operações de filtragem de scripts mais rápidas.', 'Defina grupos diferentes com base nas características do script, o que permite operações de filtragem de scripts mais rápidas.',
handleHelper: 'Executar o script {1} em {0}, continuar?',
}, },
}, },
monitor: { monitor: {

View file

@ -1029,6 +1029,7 @@ const message = {
edit: 'Редактировать скрипт', edit: 'Редактировать скрипт',
groupHelper: groupHelper:
'Установите разные группы на основе характеристик скрипта, что позволяет быстрее выполнять операции фильтрации скриптов.', 'Установите разные группы на основе характеристик скрипта, что позволяет быстрее выполнять операции фильтрации скриптов.',
handleHelper: 'Выполнить сценарий {1} на {0}, продолжить?',
}, },
}, },
monitor: { monitor: {

View file

@ -992,6 +992,7 @@ const message = {
create: '添加腳本', create: '添加腳本',
edit: '修改腳本', edit: '修改腳本',
groupHelper: '根據腳本特徵設置不同的分組可以更快地對腳本進行篩選操作', groupHelper: '根據腳本特徵設置不同的分組可以更快地對腳本進行篩選操作',
handleHelper: '將在 {0} 上執行 {1} 腳本是否繼續',
}, },
}, },
monitor: { monitor: {

View file

@ -990,6 +990,7 @@ const message = {
create: '添加脚本', create: '添加脚本',
edit: '修改脚本', edit: '修改脚本',
groupHelper: '针对脚本特征设置不同的分组可以更加快速的对脚本进行筛选操作', groupHelper: '针对脚本特征设置不同的分组可以更加快速的对脚本进行筛选操作',
handleHelper: '将在 {0} 上执行 {1} 脚本是否继续',
}, },
}, },
monitor: { monitor: {

View file

@ -198,7 +198,20 @@ const buttons = [
{ {
label: i18n.global.t('commons.button.handle'), label: i18n.global.t('commons.button.handle'),
click: (row: Cronjob.ScriptInfo) => { click: (row: Cronjob.ScriptInfo) => {
runRef.value!.acceptParams({ scriptID: row.id, scriptName: row.name }); ElMessageBox.confirm(
i18n.global.t('cronjob.library.handleHelper', [
globalStore.currentNode === 'local' ? i18n.global.t('xpack.node.master') : globalStore.currentNode,
row.name,
]),
i18n.global.t('commons.button.handle'),
{
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
type: 'info',
},
).then(() => {
runRef.value!.acceptParams({ scriptID: row.id, scriptName: row.name });
});
}, },
}, },
{ {