#!/bin/bash sh_v="2.6.7" huang='\033[33m' bai='\033[0m' lv='\033[0;32m' lan='\033[0;34m' hong='\033[31m' kjlan='\033[96m' hui='\e[37m' if [ -z "${GITHUB_RAW_URL:-}" ]; then country=$(curl -fsS --max-time 3 https://ipinfo.io/country 2>/dev/null) case "$country" in CN) GITHUB_RAW_URL="https://raw.gitmirror.com" ;; "") GITHUB_RAW_URL="https://raw.githubusercontent.com" echo "无法检测服务器地区,使用默认 GitHub Raw 地址。" >&2 ;; *) GITHUB_RAW_URL="https://raw.githubusercontent.com" ;; esac fi GITHUB_RAW_URL="${GITHUB_RAW_URL%/}" cp ./kejilion.sh /usr/local/bin/k > /dev/null 2>&1 ip_address() { ipv4_address=$(curl -s ipv4.ip.sb) ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb) } install() { if [ $# -eq 0 ]; then echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then echo "正在安装 $package..." if command -v dnf &>/dev/null; then dnf -y update && dnf install -y "$package" elif command -v yum &>/dev/null; then yum -y update && yum -y install "$package" elif command -v apt &>/dev/null; then apt update -y && apt install -y "$package" elif command -v apk &>/dev/null; then apk update && apk add "$package" else echo "未知的包管理器!" return 1 fi else echo "$package 已经安装。" fi done return 0 } install_dependency() { clear install wget socat unzip tar } remove() { if [ $# -eq 0 ]; then echo "未提供软件包参数!" return 1 fi for package in "$@"; do echo "正在卸载 $package..." if command -v dnf &>/dev/null; then dnf remove -y "${package}*" elif command -v yum &>/dev/null; then yum remove -y "${package}*" elif command -v apt &>/dev/null; then apt purge -y "${package}*" elif command -v apk &>/dev/null; then apk del "${package}*" else echo "未知的包管理器!" return 1 fi done return 0 } break_end() { echo -e "${lv}操作完成${bai}" echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear } kejilion() { k exit } install_add_docker() { if [ -f "/etc/alpine-release" ]; then apk update apk add docker docker-compose rc-update add docker default service docker start else country=$(curl -s ipinfo.io/country) if [ "$country" = "CN" ]; then cd ~ curl -sS -O "${GITHUB_RAW_URL}/kejilion/docker/main/install" && chmod +x install sh install --mirror Aliyun rm -f install cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://docker.kejilion.pro"] } EOF else curl -fsSL https://get.docker.com | sh fi systemctl start docker systemctl enable docker fi sleep 2 } install_docker() { if ! command -v docker &>/dev/null; then install_add_docker else echo "Docker环境已经安装" fi } add_swap() { # 获取当前系统中所有的 swap 分区 swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" # 清除文件系统标识符 mkswap -f "$partition" done # 确保 /swapfile 不再被使用 swapoff /swapfile # 删除旧的 /swapfile rm -f /swapfile # 创建新的 swap 分区 dd if=/dev/zero of=/swapfile bs=1M count=$new_swap chmod 600 /swapfile mkswap /swapfile swapon /swapfile if [ -f /etc/alpine-release ]; then echo "/swapfile swap swap defaults 0 0" >> /etc/fstab echo "nohup swapon /swapfile" >> /etc/local.d/swap.start chmod +x /etc/local.d/swap.start rc-update add local else echo "/swapfile swap swap defaults 0 0" >> /etc/fstab fi echo -e "虚拟内存大小已调整为${huang}${new_swap}${bai}MB" } cluster_python3() { cd ~/cluster/ curl -sS -O "${GITHUB_RAW_URL}/kejilion/python-for-vps/main/cluster/${py_task}" python3 ~/cluster/$py_task } f2b_status() { docker restart fail2ban sleep 3 docker exec -it fail2ban fail2ban-client status } f2b_status_xxx() { docker exec -it fail2ban fail2ban-client status $xxx } f2b_install_sshd() { docker run -d \ --name=fail2ban \ --net=host \ --cap-add=NET_ADMIN \ --cap-add=NET_RAW \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e VERBOSITY=-vv \ -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ --restart unless-stopped \ lscr.io/linuxserver/fail2ban:latest sleep 3 if grep -q 'Alpine' /etc/issue; then cd /path/to/fail2ban/config/fail2ban/filter.d curl -sS -O "${GITHUB_RAW_URL}/kejilion/config/main/fail2ban/alpine-sshd.conf" curl -sS -O "${GITHUB_RAW_URL}/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf" cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O "${GITHUB_RAW_URL}/kejilion/config/main/fail2ban/alpine-ssh.conf" elif grep -qi 'CentOS' /etc/redhat-release; then cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O "${GITHUB_RAW_URL}/kejilion/config/main/fail2ban/centos-ssh.conf" else install rsyslog systemctl start rsyslog systemctl enable rsyslog cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O "${GITHUB_RAW_URL}/kejilion/config/main/fail2ban/linux-ssh.conf" fi } f2b_sshd() { if grep -q 'Alpine' /etc/issue; then xxx=alpine-sshd f2b_status_xxx elif grep -qi 'CentOS' /etc/redhat-release; then xxx=centos-sshd f2b_status_xxx else xxx=linux-sshd f2b_status_xxx fi } server_reboot() { read -p "$(echo -e "${huang}现在重启服务器吗?(Y/N): ${bai}")" rboot case "$rboot" in [Yy]) echo "已重启" reboot ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac } output_status() { output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 } NR > 2 { rx_total += $2; tx_total += $10 } END { rx_units = "Bytes"; tx_units = "Bytes"; if (rx_total > 1024) { rx_total /= 1024; rx_units = "KB"; } if (rx_total > 1024) { rx_total /= 1024; rx_units = "MB"; } if (rx_total > 1024) { rx_total /= 1024; rx_units = "GB"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "KB"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "MB"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "GB"; } printf("总接收: %.2f %s\n总发送: %.2f %s\n", rx_total, rx_units, tx_total, tx_units); }' /proc/net/dev) } current_timezone() { if grep -q 'Alpine' /etc/issue; then date +"%Z %z" else timedatectl | grep "Time zone" | awk '{print $3}' fi } set_timedate() { shiqu="$1" if grep -q 'Alpine' /etc/issue; then install tzdata cp /usr/share/zoneinfo/${shiqu} /etc/localtime hwclock --systohc else timedatectl set-timezone ${shiqu} fi } linux_update() { if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then yum -y update elif command -v apt &>/dev/null; then DEBIAN_FRONTEND=noninteractive apt update -y DEBIAN_FRONTEND=noninteractive apt full-upgrade -y elif command -v apk &>/dev/null; then apk update && apk upgrade else echo "未知的包管理器!" return 1 fi } linux_clean() { if command -v dnf &>/dev/null; then dnf autoremove -y dnf clean all journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=50M dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q) -y elif command -v yum &>/dev/null; then yum autoremove -y yum clean all journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=50M yum remove $(rpm -q kernel | grep -v $(uname -r)) -y elif command -v apt &>/dev/null; then apt autoremove --purge -y apt clean -y apt autoclean -y apt remove --purge $(dpkg -l | awk '/^rc/ {print $2}') -y journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=50M apt remove --purge $(dpkg -l | awk '/^ii linux-(image|headers)-[^ ]+/{print $2}' | grep -v $(uname -r | sed 's/-.*//') | xargs) -y elif command -v apk &>/dev/null; then apk del --purge $(apk info --installed | awk '{print $1}' | grep -v $(apk info --available | awk '{print $1}')) apk autoremove apk cache clean rm -rf /var/log/* rm -rf /var/cache/apk/* else echo "未知的包管理器!" return 1 fi } bbr_on() { cat > /etc/sysctl.conf << EOF net.core.default_qdisc=fq_pie net.ipv4.tcp_congestion_control=bbr EOF sysctl -p } set_dns() { # 检查机器是否有IPv6地址 ipv6_available=0 if [[ $(ip -6 addr | grep -c "inet6") -gt 0 ]]; then ipv6_available=1 fi echo "nameserver $dns1_ipv4" > /etc/resolv.conf echo "nameserver $dns2_ipv4" >> /etc/resolv.conf if [[ $ipv6_available -eq 1 ]]; then echo "nameserver $dns1_ipv6" >> /etc/resolv.conf echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi echo "DNS地址已更新" echo "------------------------" cat /etc/resolv.conf echo "------------------------" } root_use() { clear [ "$EUID" -ne 0 ] && echo -e "${huang}请注意,该功能需要root用户才能运行!${bai}" && break_end && kejilion } dd_xitong() { dd_xitong_1() { echo -e "重装后初始用户名: ${huang}root${bai} 初始密码: ${huang}LeitboGi0ro${bai} 初始端口: ${huang}22${bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" install wget wget --no-check-certificate -qO InstallNET.sh "${GITHUB_RAW_URL}/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh" && chmod a+x InstallNET.sh } dd_xitong_2() { echo -e "重装后初始用户名: ${huang}Administrator${bai} 初始密码: ${huang}Teddysun.com${bai} 初始端口: ${huang}3389${bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" install wget wget --no-check-certificate -qO InstallNET.sh "${GITHUB_RAW_URL}/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh" && chmod a+x InstallNET.sh } dd_xitong_3() { echo -e "重装后初始用户名: ${huang}root${bai} 初始密码: ${huang}123@@@${bai} 初始端口: ${huang}22${bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" curl -O "${GITHUB_RAW_URL}/bin456789/reinstall/main/reinstall.sh" } dd_xitong_4() { echo -e "重装后初始用户名: ${huang}Administrator${bai} 初始密码: ${huang}123@@@${bai} 初始端口: ${huang}3389${bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" curl -O "${GITHUB_RAW_URL}/bin456789/reinstall/main/reinstall.sh" } while true; do root_use echo "请备份数据,将为你重装系统,预计花费15分钟。" echo -e "${hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${bai} " echo "------------------------" echo "1. Debian 12" echo "2. Debian 11" echo "3. Debian 10" echo "4. Debian 9" echo "------------------------" echo "11. Ubuntu 24.04" echo "12. Ubuntu 22.04" echo "13. Ubuntu 20.04" echo "14. Ubuntu 18.04" echo "------------------------" echo "21. CentOS 9" echo "22. CentOS 8" echo "23. CentOS 7" echo "------------------------" echo "31. Alpine Linux" echo "32. Rocky Linux" echo "33. Alma Linux" echo "34. Fedora Linux" echo "------------------------" echo "41. Windows 11" echo "42. Windows 10" echo "43. Windows 7" echo "44. Windows Server 2022" echo "45. Windows Server 2019" echo "46. Windows Server 2016" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 2) dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 3) dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 4) dd_xitong_1 bash InstallNET.sh -debian 9 reboot exit ;; 11) dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot exit ;; 21) dd_xitong_1 bash InstallNET.sh -centos 9 reboot exit ;; 22) dd_xitong_1 bash InstallNET.sh -centos 8 reboot exit ;; 23) dd_xitong_1 bash InstallNET.sh -centos 7 reboot exit ;; 31) dd_xitong_1 bash InstallNET.sh -alpine reboot exit ;; 32) dd_xitong_1 bash InstallNET.sh -rockylinux reboot exit ;; 33) dd_xitong_3 bash reinstall.sh alma reboot exit ;; 34) dd_xitong_3 bash reinstall.sh fedora reboot exit ;; 41) dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot exit ;; 42) dd_xitong_2 bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) dd_xitong_4 URL="https://massgrave.dev/windows_7_links" web_content=$(wget -q -O - "$URL") iso_link=$(echo "$web_content" | grep -oP '(?<=href=")[^"]*cn[^"]*windows_7[^"]*professional[^"]*x64[^"]*\.iso') # bash reinstall.sh windows --image-name 'Windows 7 Professional' --lang zh-cn # bash reinstall.sh windows --iso='$iso_link' --image-name='Windows 7 PROFESSIONAL' bash reinstall.sh windows --iso="$iso_link" --image-name='Windows 7 PROFESSIONAL' reboot exit ;; 44) dd_xitong_4 URL="https://massgrave.dev/windows_server_links" web_content=$(wget -q -O - "$URL") iso_link=$(echo "$web_content" | grep -oP '(?<=href=")[^"]*cn[^"]*windows_server[^"]*2022[^"]*x64[^"]*\.iso') bash reinstall.sh windows --iso="$iso_link" --image-name='Windows Server 2022 SERVERDATACENTER' reboot exit ;; 45) dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot exit ;; 0) break ;; *) echo "无效的选择,请重新输入。" break ;; esac done } bbrv3() { root_use if dpkg -l | grep -q 'linux-xanmod'; then while true; do kernel_version=$(uname -r) echo "您已安装xanmod的BBRv3内核" echo "当前内核版本: $kernel_version" echo "" echo "内核管理" echo "------------------------" echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) apt purge -y 'linux-*xanmod1*' update-grub # wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes wget -qO - "${GITHUB_RAW_URL}/kejilion/sh/main/archive.key" | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes # 步骤3:添加存储库 echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list # version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') version=$(wget -q "${GITHUB_RAW_URL}/kejilion/sh/main/check_x86-64_psabi.sh" && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') apt update -y apt install -y linux-xanmod-x64v$version echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; 2) apt purge -y 'linux-*xanmod1*' update-grub echo "XanMod内核已卸载。重启后生效" server_reboot ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done else clear echo "请备份数据,将为你升级Linux内核开启BBR3" echo "官网介绍: https://xanmod.org/" echo "------------------------------------------------" echo "仅支持Debian/Ubuntu 仅支持x86_64架构" echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!" echo "------------------------------------------------" read -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then echo "当前环境不支持,仅支持Debian和Ubuntu系统" break fi else echo "无法确定操作系统类型" break fi # 检查系统架构 arch=$(dpkg --print-architecture) if [ "$arch" != "amd64" ]; then echo "当前环境不支持,仅支持x86_64架构" break fi new_swap=1024 add_swap install wget gnupg # wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes wget -qO - "${GITHUB_RAW_URL}/kejilion/sh/main/archive.key" | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes # 步骤3:添加存储库 echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list # version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') version=$(wget -q "${GITHUB_RAW_URL}/kejilion/sh/main/check_x86-64_psabi.sh" && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') apt update -y apt install -y linux-xanmod-x64v$version # 步骤5:启用BBR3 cat > /etc/sysctl.conf << EOF net.core.default_qdisc=fq_pie net.ipv4.tcp_congestion_control=bbr EOF sysctl -p echo "XanMod内核安装并BBR3启用成功。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac fi } kejilion_sh() { while true; do clear echo -e "${kjlan}_ _ ____ _ _ _ _ ____ _ _ " echo "|_/ |___ | | | | | | |\ | " echo "| \_ |___ _| | |___ | |__| | \| " echo " " echo -e "${kjlan}科技lion一键脚本工具 v$sh_v (支持Ubuntu/Debian/CentOS/Alpine系统)${bai}" echo -e "${kjlan}-输入${huang}k${kjlan}可快速启动此脚本-${bai}" echo "------------------------" echo "1. 系统信息查询" echo "2. 系统更新" echo "3. 系统清理" echo "5. BBR管理 ▶" echo "7. WARP管理 ▶ " echo "8. 测试脚本合集 ▶ " echo "13. 系统工具 ▶ " echo "14. VPS集群控制 ▶ " echo "------------------------" echo "00. 脚本更新" echo "------------------------" echo "0. 退出脚本" echo "------------------------" read -p "请输入你的选择: " choice case $choice in 1) clear # 函数: 获取IPv4和IPv6地址 ip_address if [ "$(uname -m)" == "x86_64" ]; then cpu_info=$(cat /proc/cpuinfo | grep 'model name' | uniq | sed -e 's/model name[[:space:]]*: //') else cpu_info=$(lscpu | grep 'BIOS Model name' | awk -F': ' '{print $2}' | sed 's/^[ \t]*//') fi cpu_usage_percent=$(awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf "%.0f\n", (($2+$4-u1) * 100 / (t-t1))}' \ <(grep 'cpu ' /proc/stat) <(sleep 1; grep 'cpu ' /proc/stat)) cpu_cores=$(nproc) mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2f MB (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}') disk_info=$(df -h | awk '$NF=="/"{printf "%s/%s (%s)", $3, $2, $5}') country=$(curl -s ipinfo.io/country) city=$(curl -s ipinfo.io/city) isp_info=$(curl -s ipinfo.io/org) cpu_arch=$(uname -m) hostname=$(hostname) kernel_version=$(uname -r) congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control) queue_algorithm=$(sysctl -n net.core.default_qdisc) # 尝试使用 lsb_release 获取系统信息 os_info=$(lsb_release -ds 2>/dev/null) # 如果 lsb_release 命令失败,则尝试其他方法 if [ -z "$os_info" ]; then # 检查常见的发行文件 if [ -f "/etc/os-release" ]; then os_info=$(source /etc/os-release && echo "$PRETTY_NAME") elif [ -f "/etc/debian_version" ]; then os_info="Debian $(cat /etc/debian_version)" elif [ -f "/etc/redhat-release" ]; then os_info=$(cat /etc/redhat-release) else os_info="Unknown" fi fi output_status current_time=$(date "+%Y-%m-%d %I:%M %p") swap_used=$(free -m | awk 'NR==3{print $3}') swap_total=$(free -m | awk 'NR==3{print $2}') if [ "$swap_total" -eq 0 ]; then swap_percentage=0 else swap_percentage=$((swap_used * 100 / swap_total)) fi swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)" runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}') timezone=$(current_timezone) echo "" echo "系统信息查询" echo "------------------------" echo "主机名: $hostname" echo "运营商: $isp_info" echo "------------------------" echo "系统版本: $os_info" echo "Linux版本: $kernel_version" echo "------------------------" echo "CPU架构: $cpu_arch" echo "CPU型号: $cpu_info" echo "CPU核心数: $cpu_cores" echo "------------------------" echo "CPU占用: $cpu_usage_percent%" echo "物理内存: $mem_info" echo "虚拟内存: $swap_info" echo "硬盘占用: $disk_info" echo "------------------------" echo "$output" echo "------------------------" echo "网络拥堵算法: $congestion_algorithm $queue_algorithm" echo "------------------------" echo "公网IPv4地址: $ipv4_address" echo "公网IPv6地址: $ipv6_address" echo "------------------------" echo "地理位置: $country $city" echo "系统时区: $timezone" echo "系统时间: $current_time" echo "------------------------" echo "系统运行时长: $runtime" echo ;; 2) clear linux_update ;; 3) clear linux_clean ;; 5) clear if [ -f "/etc/alpine-release" ]; then while true; do clear congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control) queue_algorithm=$(sysctl -n net.core.default_qdisc) echo "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on ;; 2) sed -i '/net.core.default_qdisc=fq_pie/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf sysctl -p reboot ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done else install wget wget --no-check-certificate -O tcpx.sh "${GITHUB_RAW_URL}/ylx2016/Linux-NetSpeed/master/tcpx.sh" chmod +x tcpx.sh ./tcpx.sh fi ;; 7) clear install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh [option] [lisence/url/token] ;; 8) while true; do clear echo "▶ 测试脚本合集" echo "" echo "----IP及解锁状态检测-----------" echo "1. ChatGPT解锁状态检测" echo "2. Region流媒体解锁测试" echo "3. yeahwu流媒体解锁检测" echo "4. xykt_IP质量体检脚本" echo "" echo "----网络线路测速-----------" echo "11. besttrace三网回程延迟路由测试" echo "12. mtr_trace三网回程线路测试" echo "13. Superspeed三网测速" echo "14. nxtrace快速回程测试脚本" echo "15. nxtrace指定IP回程测试脚本" echo "16. ludashi2020三网线路测试" echo "17. i-abc多功能测速脚本" echo "" echo "----硬件性能测试----------" echo "21. yabs性能测试" echo "22. icu/gb5 CPU性能测试脚本" echo "" echo "----综合性测试-----------" echo "31. bench性能测试" echo "32. spiritysdx融合怪测评" echo "" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear bash <(curl -L -s check.unlock.media) ;; 3) clear install wget wget -qO- https://github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear bash <(curl -Ls IP.Check.Place) ;; 11) clear install wget wget -qO- git.io/besttrace | bash ;; 12) clear curl "${GITHUB_RAW_URL}/zhucaidan/mtr_trace/main/mtr_trace.sh" | bash ;; 13) clear bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear echo "可参考的IP列表" echo "------------------------" echo "北京电信: 219.141.136.12" echo "北京联通: 202.106.50.1" echo "北京移动: 221.179.155.161" echo "上海电信: 202.96.209.133" echo "上海联通: 210.22.97.1" echo "上海移动: 211.136.112.200" echo "广州电信: 58.60.188.222" echo "广州联通: 210.21.196.6" echo "广州移动: 120.196.165.24" echo "成都电信: 61.139.2.69" echo "成都联通: 119.6.6.6" echo "成都移动: 211.137.96.205" echo "湖南电信: 36.111.200.100" echo "湖南联通: 42.48.16.100" echo "湖南移动: 39.134.254.6" echo "------------------------" read -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear curl "${GITHUB_RAW_URL}/ludashi2020/backtrace/main/install.sh" -sSf | sh ;; 17) clear bash <(curl -sL bash.icu/speedtest) ;; 21) clear new_swap=1024 add_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear new_swap=1024 add_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear curl -Lso- bench.sh | bash ;; 32) clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 13) while true; do clear echo "▶ 系统工具" echo "------------------------" echo "1. 设置脚本启动快捷键 2. 修改登录密码" echo "4. 安装Python指定版本" echo "7. 优化DNS地址 8. 一键重装系统" echo "10. 切换优先ipv4/ipv6" echo "------------------------" echo "11. 查看端口占用状态 12. 修改虚拟内存大小" echo "13. 用户管理 14. 用户/密码生成器" echo "15. 系统时区调整 16. 设置BBR3加速" echo "18. 修改主机名" echo "19. 切换系统更新源 20. 定时任务管理" echo "------------------------" echo "21. 本机host解析 22. fail2banSSH防御程序" echo "23. 限流自动关机" echo "------------------------" echo "31. 留言板" echo "------------------------" echo "99. 重启服务器" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear read -p "请输入你的快捷按键: " kuaijiejian echo "alias $kuaijiejian='~/kejilion.sh'" >> ~/.bashrc source ~/.bashrc echo "快捷键已设置" ;; 2) clear echo "设置你的登录密码" passwd ;; 4) root_use VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "当前python版本号: ${huang}$VERSION${bai}" echo "------------" echo "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7" echo "查询更多版本: https://www.python.org/downloads/" echo "------------" read -p "输入你要安装的python版本号: " py_new_v if ! grep -q 'export PYENV_ROOT="\$HOME/.pyenv"' ~/.bashrc; then if command -v yum &>/dev/null; then yum update -y && yum install git -y yum groupinstall "Development Tools" -y yum install openssl-devel bzip2-devel libffi-devel ncurses-devel zlib-devel readline-devel sqlite-devel xz-devel findutils -y curl -O https://www.openssl.org/source/openssl-1.1.1u.tar.gz tar -xzf openssl-1.1.1u.tar.gz cd openssl-1.1.1u ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib make make install echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf ldconfig -v cd .. export LDFLAGS="-L/usr/local/openssl/lib" export CPPFLAGS="-I/usr/local/openssl/include" export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig" elif command -v apt &>/dev/null; then apt update -y && apt install git -y apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev -y elif command -v apk &>/dev/null; then apk update && apk add git apk add --no-cache bash gcc musl-dev libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev libc6-compat linux-headers make xz-dev build-base ncurses-dev else echo "未知的包管理器!" return 1 fi curl https://pyenv.run | bash cat << EOF >> ~/.bashrc export PYENV_ROOT="\$HOME/.pyenv" if [[ -d "\$PYENV_ROOT/bin" ]]; then export PATH="\$PYENV_ROOT/bin:\$PATH" fi eval "\$(pyenv init --path)" eval "\$(pyenv init -)" eval "\$(pyenv virtualenv-init -)" EOF fi sleep 1 source ~/.bashrc sleep 1 pyenv install $py_new_v pyenv global $py_new_v rm -rf /tmp/python-build.* rm -rf $(pyenv root)/cache/* VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "当前python版本号: ${huang}$VERSION${bai}" ;; 7) root_use echo "当前DNS地址" echo "------------------------" cat /etc/resolv.conf echo "------------------------" echo "" # 询问用户是否要优化DNS设置 read -p "是否要设置DNS地址?(y/n): " choice if [ "$choice" == "y" ]; then read -p "1. 国外DNS优化 2. 国内DNS优化 0. 退出 : " Limiting case "$Limiting" in 1) dns1_ipv4="1.1.1.1" dns2_ipv4="8.8.8.8" dns1_ipv6="2606:4700:4700::1111" dns2_ipv6="2001:4860:4860::8888" set_dns ;; 2) dns1_ipv4="223.5.5.5" dns2_ipv4="183.60.83.19" dns1_ipv6="2400:3200::1" dns2_ipv6="2400:da00::6666" set_dns ;; 0) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac else echo "DNS设置未更改" fi ;; 8) dd_xitong ;; 10) root_use ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) echo "" if [ "$ipv6_disabled" -eq 1 ]; then echo "当前网络优先级设置: IPv4 优先" else echo "当前网络优先级设置: IPv6 优先" fi echo "------------------------" echo "" echo "切换的网络优先级" echo "------------------------" echo "1. IPv4 优先 2. IPv6 优先" echo "------------------------" read -p "选择优先的网络: " choice case $choice in 1) sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 echo "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 echo "已切换为 IPv6 优先" ;; *) echo "无效的选择" ;; esac ;; 11) clear ss -tulnape ;; 12) root_use # 获取当前交换空间信息 swap_used=$(free -m | awk 'NR==3{print $3}') swap_total=$(free -m | awk 'NR==3{print $2}') if [ "$swap_total" -eq 0 ]; then swap_percentage=0 else swap_percentage=$((swap_used * 100 / swap_total)) fi swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)" echo "当前虚拟内存: $swap_info" read -p "是否调整大小?(Y/N): " choice case "$choice" in [Yy]) # 输入新的虚拟内存大小 read -p "请输入虚拟内存大小MB: " new_swap add_swap ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 13) while true; do root_use # 显示所有用户、用户权限、用户组和是否在sudoers中 echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do groups=$(groups "$username" | cut -d : -f 2) sudo_status=$(sudo -n -lU "$username" 2>/dev/null | grep -q '(ALL : ALL)' && echo "Yes" || echo "No") printf "%-20s %-30s %-20s %-10s\n" "$username" "$homedir" "$groups" "$sudo_status" done < /etc/passwd echo "" echo "账户操作" echo "------------------------" echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" echo "5. 删除账号" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) # 提示用户输入新用户名 read -p "请输入新用户名: " new_username # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" echo "操作已完成。" ;; 2) # 提示用户输入新用户名 read -p "请输入新用户名: " new_username # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers echo "操作已完成。" ;; 3) read -p "请输入用户名: " username # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers ;; 4) read -p "请输入用户名: " username # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) read -p "请输入要删除的用户名: " username # 删除用户及其主目录 userdel -r "$username" ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 14) clear echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" echo "随机用户名 $i: $username" done echo "" echo "随机姓名" echo "------------------------" first_names=("John" "Jane" "Michael" "Emily" "David" "Sophia" "William" "Olivia" "James" "Emma" "Ava" "Liam" "Mia" "Noah" "Isabella") last_names=("Smith" "Johnson" "Brown" "Davis" "Wilson" "Miller" "Jones" "Garcia" "Martinez" "Williams" "Lee" "Gonzalez" "Rodriguez" "Hernandez") # 生成5个随机用户姓名 for i in {1..5}; do first_name_index=$((RANDOM % ${#first_names[@]})) last_name_index=$((RANDOM % ${#last_names[@]})) user_name="${first_names[$first_name_index]} ${last_names[$last_name_index]}" echo "随机用户姓名 $i: $user_name" done echo "" echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) echo "随机UUID $i: $uuid" done echo "" echo "16位随机密码" echo "------------------------" for i in {1..5}; do password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) echo "随机密码 $i: $password" done echo "" echo "32位随机密码" echo "------------------------" for i in {1..5}; do password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) echo "随机密码 $i: $password" done echo "" ;; 15) root_use while true; do echo "系统时间信息" # 获取当前系统时区 timezone=$(current_timezone) # 获取当前系统时间 current_time=$(date +"%Y-%m-%d %H:%M:%S") # 显示时区和时间 echo "当前系统时区:$timezone" echo "当前系统时间:$current_time" echo "" echo "时区切换" echo "亚洲------------------------" echo "1. 中国上海时间 2. 中国香港时间" echo "3. 日本东京时间 4. 韩国首尔时间" echo "5. 新加坡时间 6. 印度加尔各答时间" echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" echo "欧洲------------------------" echo "11. 英国伦敦时间 12. 法国巴黎时间" echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "美洲------------------------" echo "21. 美国西部时间 22. 美国东部时间" echo "23. 加拿大时间 24. 墨西哥时间" echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) set_timedate Asia/Shanghai ;; 2) set_timedate Asia/Hong_Kong ;; 3) set_timedate Asia/Tokyo ;; 4) set_timedate Asia/Seoul ;; 5) set_timedate Asia/Singapore ;; 6) set_timedate Asia/Kolkata ;; 7) set_timedate Asia/Dubai ;; 8) set_timedate Australia/Sydney ;; 11) set_timedate Europe/London ;; 12) set_timedate Europe/Paris ;; 13) set_timedate Europe/Berlin ;; 14) set_timedate Europe/Moscow ;; 15) set_timedate Europe/Amsterdam ;; 16) set_timedate Europe/Madrid ;; 21) set_timedate America/Los_Angeles ;; 22) set_timedate America/New_York ;; 23) set_timedate America/Vancouver ;; 24) set_timedate America/Mexico_City ;; 25) set_timedate America/Sao_Paulo ;; 26) set_timedate America/Argentina/Buenos_Aires ;; 0) break ;; # 跳出循环,退出菜单 *) break ;; # 跳出循环,退出菜单 esac done ;; 16) bbrv3 ;; 18) root_use current_hostname=$(hostname) echo "当前主机名: $current_hostname" read -p "是否要更改主机名?(y/n): " answer if [[ "${answer,,}" == "y" ]]; then # 获取新的主机名 read -p "请输入新的主机名: " new_hostname if [ -n "$new_hostname" ]; then if [ -f /etc/alpine-release ]; then # Alpine echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed fi echo "主机名已更改为: $new_hostname" else echo "无效的主机名。未更改主机名。" exit 1 fi else echo "未更改主机名。" fi ;; 19) root_use # 获取系统信息 source /etc/os-release # 定义 Ubuntu 更新源 aliyun_ubuntu_source="http://mirrors.aliyun.com/ubuntu/" official_ubuntu_source="http://archive.ubuntu.com/ubuntu/" initial_ubuntu_source="" # 定义 Debian 更新源 aliyun_debian_source="http://mirrors.aliyun.com/debian/" official_debian_source="http://deb.debian.org/debian/" initial_debian_source="" # 定义 CentOS 更新源 aliyun_centos_source="http://mirrors.aliyun.com/centos/" official_centos_source="http://mirror.centos.org/centos/" initial_centos_source="" # 获取当前更新源并设置初始源 case "$ID" in ubuntu) initial_ubuntu_source=$(grep -E '^deb ' /etc/apt/sources.list | head -n 1 | awk '{print $2}') ;; debian) initial_debian_source=$(grep -E '^deb ' /etc/apt/sources.list | head -n 1 | awk '{print $2}') ;; centos) initial_centos_source=$(awk -F= '/^baseurl=/ {print $2}' /etc/yum.repos.d/CentOS-Base.repo | head -n 1 | tr -d ' ') ;; *) echo "未知系统,无法执行切换源脚本" exit 1 ;; esac # 备份当前源 backup_sources() { case "$ID" in ubuntu) cp /etc/apt/sources.list /etc/apt/sources.list.bak ;; debian) cp /etc/apt/sources.list /etc/apt/sources.list.bak ;; centos) if [ ! -f /etc/yum.repos.d/CentOS-Base.repo.bak ]; then cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak else echo "备份已存在,无需重复备份" fi ;; *) echo "未知系统,无法执行备份操作" exit 1 ;; esac echo "已备份当前更新源为 /etc/apt/sources.list.bak 或 /etc/yum.repos.d/CentOS-Base.repo.bak" } # 还原初始更新源 restore_initial_source() { case "$ID" in ubuntu) cp /etc/apt/sources.list.bak /etc/apt/sources.list ;; debian) cp /etc/apt/sources.list.bak /etc/apt/sources.list ;; centos) cp /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo ;; *) echo "未知系统,无法执行还原操作" exit 1 ;; esac echo "已还原初始更新源" } # 函数:切换更新源 switch_source() { case "$ID" in ubuntu) sed -i 's|'"$initial_ubuntu_source"'|'"$1"'|g' /etc/apt/sources.list ;; debian) sed -i 's|'"$initial_debian_source"'|'"$1"'|g' /etc/apt/sources.list ;; centos) sed -i "s|^baseurl=.*$|baseurl=$1|g" /etc/yum.repos.d/CentOS-Base.repo ;; *) echo "未知系统,无法执行切换操作" exit 1 ;; esac } # 主菜单 while true; do case "$ID" in ubuntu) echo "Ubuntu 更新源切换脚本" echo "------------------------" ;; debian) echo "Debian 更新源切换脚本" echo "------------------------" ;; centos) echo "CentOS 更新源切换脚本" echo "------------------------" ;; *) echo "未知系统,无法执行脚本" exit 1 ;; esac echo "1. 切换到阿里云源" echo "2. 切换到官方源" echo "------------------------" echo "3. 备份当前更新源" echo "4. 还原初始更新源" echo "------------------------" echo "0. 返回上一级" echo "------------------------" read -p "请选择操作: " choice case $choice in 1) backup_sources case "$ID" in ubuntu) switch_source $aliyun_ubuntu_source ;; debian) switch_source $aliyun_debian_source ;; centos) switch_source $aliyun_centos_source ;; *) echo "未知系统,无法执行切换操作" exit 1 ;; esac echo "已切换到阿里云源" ;; 2) backup_sources case "$ID" in ubuntu) switch_source $official_ubuntu_source ;; debian) switch_source $official_debian_source ;; centos) switch_source $official_centos_source ;; *) echo "未知系统,无法执行切换操作" exit 1 ;; esac echo "已切换到官方源" ;; 3) backup_sources case "$ID" in ubuntu) switch_source $initial_ubuntu_source ;; debian) switch_source $initial_debian_source ;; centos) switch_source $initial_centos_source ;; *) echo "未知系统,无法执行切换操作" exit 1 ;; esac echo "已切换到初始更新源" ;; 4) restore_initial_source ;; 0) break ;; *) echo "无效的选择,请重新输入" ;; esac break_end done ;; 20) while true; do clear echo "定时任务列表" crontab -l echo "" echo "操作" echo "------------------------" echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "请输入新任务的执行命令: " newquest echo "------------------------" echo "1. 每月任务 2. 每周任务" echo "3. 每天任务 4. 每小时任务" echo "------------------------" read -p "请输入你的选择: " dingshi case $dingshi in 1) read -p "选择每月的几号执行任务? (1-30): " day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) read -p "选择周几执行任务? (0-6,0代表星期日): " weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) read -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) read -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac ;; 2) read -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - ;; 3) crontab -e ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 21) root_use while true; do echo "本机host解析列表" echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" echo "操作" echo "------------------------" echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " host_dns case $host_dns in 1) read -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts ;; 2) read -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 22) root_use if docker inspect fail2ban &>/dev/null ; then while true; do clear echo "SSH防御程序已启动" echo "------------------------" echo "1. 查看SSH拦截记录" echo "2. 日志实时监控" echo "------------------------" echo "9. 卸载防御程序" echo "------------------------" echo "0. 退出" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) echo "------------------------" f2b_sshd echo "------------------------" ;; 2) tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log break ;; 9) docker rm -f fail2ban rm -rf /path/to/fail2ban echo "Fail2Ban防御程序已卸载" break ;; 0) break ;; *) echo "无效的选择,请重新输入。" ;; esac break_end done elif [ -x "$(command -v fail2ban-client)" ] ; then clear echo "卸载旧版fail2ban" read -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) remove fail2ban rm -rf /etc/fail2ban echo "Fail2Ban防御程序已卸载" ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac else clear echo "fail2ban是一个SSH防止暴力破解工具" echo "官网介绍: https://github.com/fail2ban/fail2ban" echo "------------------------------------------------" echo "工作原理:研判非法IP恶意高频访问SSH端口,自动进行IP封锁" echo "------------------------------------------------" read -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) clear install_docker f2b_install_sshd cd ~ f2b_status echo "Fail2Ban防御程序已开启" ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac fi ;; 23) root_use echo "当前流量使用情况,重启服务器流量计算会清零!" output_status echo "$output" # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then # 获取 threshold_gb 的值 threshold_gb=$(grep -oP 'threshold_gb=\K\d+' ~/Limiting_Shut_down.sh) echo -e "当前设置的限流阈值为 ${hang}${threshold_gb}${bai}GB" else echo -e "${hui}前未启用限流关机功能${bai}" fi echo echo "------------------------------------------------" echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!每月1日重置流量重启服务器。" read -p "1. 开启限流关机功能 2. 停用限流关机功能 0. 退出 : " Limiting case "$Limiting" in 1) # 输入新的虚拟内存大小 echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出." read -p "请输入流量阈值(单位为GB): " threshold_gb cd ~ curl -Ss -O "${GITHUB_RAW_URL}/kejilion/sh/main/Limiting_Shut_down.sh" chmod +x ~/Limiting_Shut_down.sh sed -i "s/110/$threshold_gb/g" ~/Limiting_Shut_down.sh crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - (crontab -l ; echo "* * * * * ~/Limiting_Shut_down.sh") | crontab - > /dev/null 2>&1 crontab -l | grep -v 'reboot' | crontab - (crontab -l ; echo "0 1 1 * * reboot") | crontab - > /dev/null 2>&1 echo "限流关机已设置" ;; 0) echo "已取消" ;; 2) crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - crontab -l | grep -v 'reboot' | crontab - rm ~/Limiting_Shut_down.sh echo "已关闭限流关机功能" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 31) clear install sshpass remote_ip="66.42.61.110" remote_user="liaotian123" remote_file="/home/liaotian123/liaotian.txt" password="kejilionYYDS" # 替换为您的密码 clear echo "科技lion留言板" echo "------------------------" # 显示已有的留言内容 sshpass -p "${password}" ssh -o StrictHostKeyChecking=no "${remote_user}@${remote_ip}" "cat '${remote_file}'" echo "" echo "------------------------" # 判断是否要留言 read -p "是否要留言?(y/n): " leave_message if [ "$leave_message" == "y" ] || [ "$leave_message" == "Y" ]; then # 输入新的留言内容 read -p "输入你的昵称: " nicheng read -p "输入你的聊天内容: " neirong # 添加新留言到远程文件 sshpass -p "${password}" ssh -o StrictHostKeyChecking=no "${remote_user}@${remote_ip}" "echo -e '${nicheng}: ${neirong}' >> '${remote_file}'" echo "已添加留言: " echo "${nicheng}: ${neirong}" echo "" else echo "您选择了不留言。" fi echo "留言板操作完成。" ;; 99) clear server_reboot ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 14) clear while true; do clear echo "▶ VPS集群控制" echo "你可以远程操控多台VPS一起执行任务(仅支持Ubuntu/Debian)" echo "------------------------" echo "1. 安装集群环境" echo "------------------------" echo "2. 集群控制中心" echo "------------------------" echo "7. 备份集群环境" echo "8. 还原集群环境" echo "9. 卸载集群环境" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install python3 python3-paramiko speedtest-cli lrzsz mkdir cluster && cd cluster touch servers.py cat > ./servers.py << EOF servers = [ ] EOF ;; 2) while true; do clear echo "集群服务器列表" cat ~/cluster/servers.py echo "" echo "操作" echo "------------------------" echo "1. 添加服务器 2. 删除服务器 3. 编辑服务器" echo "------------------------" echo "11. 安装科技lion脚本 12. 更新系统 13. 清理系统" echo "15. 安装BBR3 16. 设置1G虚拟内存" echo "17. 设置时区到上海 18. 开放所有端口" echo "------------------------" echo "51. 自定义指令" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "服务器名称: " server_name read -p "服务器IP: " server_ip read -p "服务器端口(22): " server_port server_port=${server_port:-22} read -p "服务器用户名(root): " server_username server_username=${server_username:-root} read -p "服务器用户密码: " server_password sed -i "/servers = \[/a\ {\"name\": \"$server_name\", \"hostname\": \"$server_ip\", \"port\": $server_port, \"username\": \"$server_username\", \"password\": \"$server_password\", \"remote_path\": \"/home/\"}," ~/cluster/servers.py ;; 2) read -p "请输入需要删除的关键字: " rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) install nano nano ~/cluster/servers.py ;; 11) py_task=install_kejilion.py cluster_python3 ;; 12) py_task=update.py cluster_python3 ;; 13) py_task=clean.py cluster_python3 ;; 15) py_task=install_bbr3.py cluster_python3 ;; 16) py_task=swap1024.py cluster_python3 ;; 17) py_task=time_shanghai.py cluster_python3 ;; 18) py_task=firewall_close.py cluster_python3 ;; 51) read -p "请输入批量执行的命令: " mingling py_task=custom_tasks.py cd ~/cluster/ curl -sS -O "${GITHUB_RAW_URL}/kejilion/python-for-vps/main/cluster/${py_task}" sed -i "s#Customtasks#$mingling#g" ~/cluster/$py_task python3 ~/cluster/$py_task ;; 0) break # 跳出循环,退出菜单 ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 7) clear echo "将下载服务器列表数据,按任意键下载!" read -n 1 -s -r -p "" sz -y ~/cluster/servers.py ;; 8) clear echo "请上传您的servers.py,按任意键开始上传!" read -n 1 -s -r -p "" cd ~/cluster/ rz -y ;; 9) clear read -p "请先备份环境,确定要卸载集群控制环境吗?(Y/N): " choice case "$choice" in [Yy]) remove python3-paramiko speedtest-cli lrzsz rm -rf ~/cluster/ ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 00) cd ~ clear echo "更新日志" echo "------------------------" echo "全部日志: ${GITHUB_RAW_URL}/kejilion/sh/main/kejilion_sh_log.txt" echo "------------------------" curl -s "${GITHUB_RAW_URL}/kejilion/sh/main/kejilion_sh_log.txt" | tail -n 35 sh_v_new=$(curl -s "${GITHUB_RAW_URL}/kejilion/sh/main/kejilion.sh" | grep -o 'sh_v="[0-9.]*"' | cut -d '"' -f 2) if [ "$sh_v" = "$sh_v_new" ]; then echo -e "${lv}你已经是最新版本!${huang}v$sh_v${bai}" else echo "发现新版本!" echo -e "当前版本 v$sh_v 最新版本 ${huang}v$sh_v_new${bai}" echo "------------------------" read -p "确定更新脚本吗?(Y/N): " choice case "$choice" in [Yy]) clear curl -sS -O "${GITHUB_RAW_URL}/kejilion/sh/main/kejilion.sh" && chmod +x kejilion.sh cp ./kejilion.sh /usr/local/bin/k > /dev/null 2>&1 echo -e "${lv}脚本已更新到最新版本!${huang}v$sh_v_new${bai}" break_end kejilion ;; [Nn]) echo "已取消" ;; *) ;; esac fi ;; 0) clear exit ;; *) echo "无效的输入!" ;; esac break_end done } if [ "$#" -eq 0 ]; then # 如果没有参数,运行交互式逻辑 kejilion_sh else # 如果有参数,执行相应函数 case $1 in install|add|安装) shift install "$@" ;; remove|del|卸载) shift remove "$@" ;; update|更新) linux_update ;; clean|清理) linux_clean ;; dd|重装) dd_xitong ;; bbr3|bbrv3) bbrv3 ;; *) echo "无效参数" ;; esac fi