Merge pull request #1070 from nested-universe/patch-3

Continue replace self-invoked with a while true loop
This commit is contained in:
juewuy
2026-01-01 14:53:29 +08:00
committed by GitHub

View File

@@ -7,184 +7,195 @@ __IS_MODULE_8_TOOLS_LOADED=1
. "$CRASHDIR"/libs/logger.sh . "$CRASHDIR"/libs/logger.sh
. "$CRASHDIR"/libs/web_get_bin.sh . "$CRASHDIR"/libs/web_get_bin.sh
stop_iptables() {
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 >/dev/null 2>&1
ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 >/dev/null 2>&1
}
ssh_tools() {
while true; do
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启
[ -z "$ssh_port" ] && ssh_port=10022
echo "-----------------------------------------------"
echo -e "\033[33m此功能仅针对使用Openwrt系统的设备生效且不依赖服务\033[0m"
echo -e "\033[31m本功能不支持红米AX6S等镜像化系统设备请勿尝试\033[0m"
echo "-----------------------------------------------"
echo -e " 1 \033[32m修改\033[0m外网访问端口\033[36m$ssh_port\033[0m"
echo -e " 2 \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
echo -e " 3 \033[33m$ssh_ol\033[0m外网访问SSH"
echo "-----------------------------------------------"
echo -e " 0 返回上级菜单 \033[0m"
echo "-----------------------------------------------"
read -p "请输入对应数字 > " num
case "$num" in
""|0)
break
;;
1)
read -p "请输入端口号(1000-65535) > " num
if [ -z "$num" ]; then
errornum
elif [ $num -gt 65535 -o $num -le 999 ]; then
echo -e "\033[31m输入错误请输入正确的数值(1000-65535)\033[0m"
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
echo -e "\033[31m当前端口已被其他进程占用请重新输入\033[0m"
else
ssh_port=$num
setconfig ssh_port $ssh_port
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
stop_iptables
echo -e "\033[32m设置成功请重新开启外网访问SSH功能\033[0m"
fi
sleep 1
;;
2)
passwd
sleep 1
;;
3)
if [ "$ssh_ol" = "开启" ]; then
iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22
[ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
echo "-----------------------------------------------"
echo -e "已开启外网访问SSH功能"
else
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
stop_iptables
echo "-----------------------------------------------"
echo -e "已禁止外网访问SSH"
fi
break
;;
*)
errornum
sleep 1
break
;;
esac
done
}
#工具与优化 #工具与优化
tools() { tools() {
ssh_tools() { while true; do
stop_iptables() { #获取设置默认显示
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 >/dev/null 2>&1 grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=禁用 || mi_update=启用
ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 >/dev/null 2>&1 [ "$mi_mi_autoSSH" = "已配置" ] && mi_mi_autoSSH_type=32m已配置 || mi_mi_autoSSH_type=31m未配置
} [ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32m已启用 || mi_tunfix=31m未启用
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启
[ -z "$ssh_port" ] && ssh_port=10022
echo "-----------------------------------------------"
echo -e "\033[33m此功能仅针对使用Openwrt系统的设备生效且不依赖服务\033[0m"
echo -e "\033[31m本功能不支持红米AX6S等镜像化系统设备请勿尝试\033[0m"
echo "-----------------------------------------------"
echo -e " 1 \033[32m修改\033[0m外网访问端口\033[36m$ssh_port\033[0m"
echo -e " 2 \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
echo -e " 3 \033[33m$ssh_ol\033[0m外网访问SSH"
echo "-----------------------------------------------"
echo -e " 0 返回上级菜单 \033[0m"
echo "-----------------------------------------------"
read -p "请输入对应数字 > " num
case "$num" in
0) ;;
1)
read -p "请输入端口号(1000-65535) > " num
if [ -z "$num" ]; then
errornum
elif [ $num -gt 65535 -o $num -le 999 ]; then
echo -e "\033[31m输入错误请输入正确的数值(1000-65535)\033[0m"
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
echo -e "\033[31m当前端口已被其他进程占用请重新输入\033[0m"
else
ssh_port=$num
setconfig ssh_port $ssh_port
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
stop_iptables
echo -e "\033[32m设置成功请重新开启外网访问SSH功能\033[0m"
fi
sleep 1
ssh_tools
;;
2)
passwd
sleep 1
ssh_tools
;;
3)
if [ "$ssh_ol" = "开启" ]; then
iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22
[ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
echo "-----------------------------------------------"
echo -e "已开启外网访问SSH功能"
else
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
stop_iptables
echo "-----------------------------------------------"
echo -e "已禁止外网访问SSH"
fi
;;
*)
errornum
;;
esac
}
#获取设置默认显示
grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=禁用 || mi_update=启用
[ "$mi_mi_autoSSH" = "已配置" ] && mi_mi_autoSSH_type=32m已配置 || mi_mi_autoSSH_type=31m未配置
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32m已启用 || mi_tunfix=31m未启用
#
echo "-----------------------------------------------"
echo -e "\033[30;47m欢迎使用其他工具菜单\033[0m"
echo -e "\033[33m本页工具可能无法兼容全部Linux设备请酌情使用\033[0m"
echo -e "磁盘占用/所在目录:"
du -sh "$CRASHDIR"
echo "-----------------------------------------------"
echo -e " 1 ShellCrash\033[33m测试菜单\033[0m"
echo -e " 2 ShellCrash\033[32m新手引导\033[0m"
echo -e " 3 \033[36m日志及推送工具\033[0m"
[ -f /etc/firewall.user ] && echo -e " 4 \033[32m配置\033[0m外网访问SSH"
[ -x /usr/sbin/otapredownload ] && echo -e " 5 \033[33m$mi_update\033[0m小米系统自动更新"
[ "$systype" = "mi_snapshot" ] && echo -e " 6 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
[ "$systype" = "mi_snapshot" ] && echo -e " 8 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
echo "-----------------------------------------------"
echo -e " 0 返回上级菜单"
echo "-----------------------------------------------"
read -p "请输入对应数字 > " num
if [ -z "$num" ]; then
errornum
elif [ "$num" = 0 ]; then
i=
elif [ "$num" = 1 ]; then echo "-----------------------------------------------"
testcommand echo -e "\033[30;47m欢迎使用其他工具菜单\033[0m"
echo -e "\033[33m本页工具可能无法兼容全部Linux设备请酌情使用\033[0m"
elif [ "$num" = 2 ]; then echo -e "磁盘占用/所在目录:"
userguide du -sh "$CRASHDIR"
echo "-----------------------------------------------"
elif [ "$num" = 3 ]; then echo -e " 1 ShellCrash\033[33m测试菜单\033[0m"
log_pusher echo -e " 2 ShellCrash\033[32m新手引导\033[0m"
tools echo -e " 3 \033[36m日志及推送工具\033[0m"
[ -f /etc/firewall.user ] && echo -e " 4 \033[32m配置\033[0m外网访问SSH"
elif [ "$num" = 4 ]; then [ -x /usr/sbin/otapredownload ] && echo -e " 5 \033[33m$mi_update\033[0m小米系统自动更新"
ssh_tools [ "$systype" = "mi_snapshot" ] && echo -e " 6 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
sleep 1 [ "$systype" = "mi_snapshot" ] && echo -e " 8 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
tools echo "-----------------------------------------------"
echo -e " 0 返回上级菜单"
elif [ "$num" = 7 ]; then echo "-----------------------------------------------"
echo "-----------------------------------------------" read -p "请输入对应数字 > " num
if [ ! -f "$CRASHDIR"/tools/ShellDDNS.sh ]; then case "$num" in
echo -e "正在获取在线脚本……" ""|0)
get_bin "$TMPDIR"/ShellDDNS.sh tools/ShellDDNS.sh break
if [ "$?" = "0" ]; then ;;
mv -f "$TMPDIR"/ShellDDNS.sh "$CRASHDIR"/tools/ShellDDNS.sh 1)
. "$CRASHDIR"/tools/ShellDDNS.sh testcommand
else break
echo -e "\033[31m文件下载失败\033[0m" ;;
fi 2)
else userguide
. "$CRASHDIR"/tools/ShellDDNS.sh break
fi ;;
sleep 1 3)
tools log_pusher
;;
elif [ -x /usr/sbin/otapredownload ] && [ "$num" = 5 ]; then 4)
if [ "$mi_update" = "禁用" ]; then ssh_tools
grep -q "otapredownload" /etc/crontabs/root && sleep 1
sed -i "/^[^\#]*otapredownload/ s/^/#/" /etc/crontabs/root || ;;
echo "#15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root 5)
else if [ -x /usr/sbin/otapredownload ]; then
grep -q "otapredownload" /etc/crontabs/root && if [ "$mi_update" = "禁用" ]; then
sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root || grep -q "otapredownload" /etc/crontabs/root &&
echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root sed -i "/^[^\#]*otapredownload/ s/^/#/" /etc/crontabs/root ||
fi echo "#15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
echo "-----------------------------------------------" else
echo -e "已\033[33m$mi_update\033[0m小米路由器的自动更新如未生效请在官方APP中同步设置" grep -q "otapredownload" /etc/crontabs/root &&
sleep 1 sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root ||
tools echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
fi
elif [ "$num" = 6 ]; then echo "-----------------------------------------------"
if [ "$systype" = "mi_snapshot" ]; then echo -e "已\033[33m$mi_update\033[0m小米路由器的自动更新如未生效请在官方APP中同步设置"
mi_autoSSH sleep 1
else fi
echo "不支持的设备!" ;;
fi 6)
tools if [ "$systype" = "mi_snapshot" ]; then
elif [ "$num" = 8 ]; then mi_autoSSH
if [ -f "$CRASHDIR"/tools/tun.ko ]; then else
read -p "是否禁用此功能并移除相关补丁?(1/0) > " res echo "不支持的设备!"
[ "$res" = 1 ] && { fi
rm -rf "$CRASHDIR"/tools/tun.ko ;;
echo -e "\033[33m补丁文件已移除请立即重启设备以防止出错\033[0m" 7)
} echo "-----------------------------------------------"
elif ckcmd modinfo && [ -z "$(modinfo tun)" ]; then if [ ! -f "$CRASHDIR"/tools/ShellDDNS.sh ]; then
echo -e "\033[33m本功能需要修改系统文件不保证没有任何风险\033[0m" echo -e "正在获取在线脚本……"
echo -e "\033[33m本功能采集的Tun模块并不一定适用于你的设备\033[0m" get_bin "$TMPDIR"/ShellDDNS.sh tools/ShellDDNS.sh
sleep 1 if [ "$?" = "0" ]; then
read -p "我已知晓,出现问题会自行承担!(1/0) > " res mv -f "$TMPDIR"/ShellDDNS.sh "$CRASHDIR"/tools/ShellDDNS.sh
if [ "$res" = 1 ]; then . "$CRASHDIR"/tools/ShellDDNS.sh
echo "-----------------------------------------------" else
echo "正在连接服务器获取Tun模块补丁文件…………" echo -e "\033[31m文件下载失败\033[0m"
get_bin "$TMPDIR"/tun.ko bin/fix/tun.ko fi
if [ "$?" = "0" ]; then else
mv -f "$TMPDIR"/tun.ko "$CRASHDIR"/tools/tun.ko && . "$CRASHDIR"/tools/ShellDDNS.sh
/data/shellcrash_init.sh tunfix && fi
echo -e "\033[32m设置成功请重启服务\033[0m" sleep 1
else ;;
echo -e "\033[31m文件下载失败请重试\033[0m" 8)
fi if [ -f "$CRASHDIR"/tools/tun.ko ]; then
fi read -p "是否禁用此功能并移除相关补丁?(1/0) > " res
else [ "$res" = 1 ] && {
echo -e "\033[31m当前设备无需设置请勿尝试\033[0m" rm -rf "$CRASHDIR"/tools/tun.ko
sleep 1 echo -e "\033[33m补丁文件已移除请立即重启设备以防止出错\033[0m"
fi }
tools elif ckcmd modinfo && [ -z "$(modinfo tun)" ]; then
else echo -e "\033[33m本功能需要修改系统文件不保证没有任何风险\033[0m"
errornum echo -e "\033[33m本功能采集的Tun模块并不一定适用于你的设备\033[0m"
fi sleep 1
read -p "我已知晓,出现问题会自行承担!(1/0) > " res
if [ "$res" = 1 ]; then
echo "-----------------------------------------------"
echo "正在连接服务器获取Tun模块补丁文件…………"
get_bin "$TMPDIR"/tun.ko bin/fix/tun.ko
if [ "$?" = "0" ]; then
mv -f "$TMPDIR"/tun.ko "$CRASHDIR"/tools/tun.ko &&
/data/shellcrash_init.sh tunfix &&
echo -e "\033[32m设置成功请重启服务\033[0m"
else
echo -e "\033[31m文件下载失败请重试\033[0m"
fi
fi
else
echo -e "\033[31m当前设备无需设置请勿尝试\033[0m"
sleep 1
fi
;;
*)
errornum
sleep 1
break
;;
esac
done
} }
mi_autoSSH() { mi_autoSSH() {