#!/bin/bash sh_v="2.6.6" huang='\033[33m' bai='\033[0m' lv='\033[0;32m' lan='\033[0;34m' hong='\033[31m' kjlan='\033[96m' hui='\e[37m' 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 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 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 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 https://raw.gitmirror.com/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 } docker_restart() { if [ -f "/etc/alpine-release" ]; then service docker restart else systemctl restart docker fi } docker_ipv6_on() { mkdir -p /etc/docker &>/dev/null cat > /etc/docker/daemon.json << EOF { "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" } EOF docker_restart echo "Docker已开启v6访问" } docker_ipv6_off() { rm -rf etc/docker/daemon.json &>/dev/null docker_restart echo "Docker已关闭v6访问" } iptables_open() { iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F ip6tables -P INPUT ACCEPT ip6tables -P FORWARD ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -F } 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 https://raw.gitmirror.com/kejilion/python-for-vps/main/cluster/$py_task python3 ~/cluster/$py_task } tmux_run() { # Check if the session already exists tmux has-session -t $SESSION_NAME 2>/dev/null # $? is a special variable that holds the exit status of the last executed command if [ $? != 0 ]; then # Session doesn't exist, create a new one tmux new -s $SESSION_NAME else # Session exists, attach to it tmux attach-session -t $SESSION_NAME fi } 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 https://raw.gitmirror.com/kejilion/config/main/fail2ban/alpine-sshd.conf curl -sS -O https://raw.gitmirror.com/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 "------------------------" } restart_ssh() { if command -v dnf &>/dev/null; then systemctl restart sshd elif command -v yum &>/dev/null; then systemctl restart sshd elif command -v apt &>/dev/null; then service ssh restart elif command -v apk &>/dev/null; then service sshd restart else echo "未知的包管理器!" return 1 fi } new_ssh_port() { # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config # 替换 SSH 配置文件中的端口号 sed -i "s/Port [0-9]\+/Port $new_port/g" /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* # 重启 SSH 服务 restart_ssh echo "SSH 端口已修改为: $new_port" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 } add_sshkey() { # ssh-keygen -t rsa -b 4096 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N "" ssh-keygen -t ed25519 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N "" cat ~/.ssh/sshkey.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ip_address echo -e "私钥信息已生成,务必复制保存,可保存成 ${huang}${ipv4_address}_ssh.key${bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey echo "--------------------------------" sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \ -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \ -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \ -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* echo -e "${lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${bai}" } add_sshpasswd() { echo "设置你的ROOT密码" passwd sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config; sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config; rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh echo -e "${lv}ROOT登录设置完毕!${bai}" } root_use() { clear [ "$EUID" -ne 0 ] && echo -e "${huang}请注意,该功能需要root用户才能运行!${bai}" && break_end && kejilion } 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 "4. 常用工具 ▶" echo "5. BBR管理 ▶" echo "6. Docker管理 ▶ " echo "7. WARP管理 ▶ " echo "8. 测试脚本合集 ▶ " echo "12. 我的工作区 ▶ " 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 ;; 4) while true; do clear echo "▶ 安装常用工具" echo "------------------------" echo "1. curl 下载工具" echo "2. wget 下载工具" echo "3. sudo 超级管理权限工具" echo "4. socat 通信连接工具" echo "5. htop 系统监控工具" echo "6. iftop 网络流量监控工具" echo "7. unzip ZIP压缩解压工具" echo "8. tar GZ压缩解压工具" echo "9. tmux 多路后台运行工具" echo "10. ffmpeg 视频编码直播推流工具" echo "11. btop 现代化监控工具" echo "12. ranger 文件管理工具" echo "13. gdu 磁盘占用查看工具" echo "14. fzf 全局搜索工具" echo "------------------------" echo "21. cmatrix 黑客帝国屏保" echo "22. sl 跑火车屏保" echo "------------------------" echo "26. 俄罗斯方块小游戏" echo "27. 贪吃蛇小游戏" echo "28. 太空入侵者小游戏" echo "------------------------" echo "31. 全部安装" echo "32. 全部卸载" echo "------------------------" echo "41. 安装指定工具" echo "42. 卸载指定工具" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear echo "工具已安装,使用方法如下:" curl --help ;; 2) clear install wget clear echo "工具已安装,使用方法如下:" wget --help ;; 3) clear install sudo clear echo "工具已安装,使用方法如下:" sudo --help ;; 4) clear install socat clear echo "工具已安装,使用方法如下:" socat -h ;; 5) clear install htop clear htop ;; 6) clear install iftop clear iftop ;; 7) clear install unzip clear echo "工具已安装,使用方法如下:" unzip ;; 8) clear install tar clear echo "工具已安装,使用方法如下:" tar --help ;; 9) clear install tmux clear echo "工具已安装,使用方法如下:" tmux --help ;; 10) clear install ffmpeg clear echo "工具已安装,使用方法如下:" ffmpeg --help ;; 11) clear install btop clear btop ;; 12) clear install ranger cd / clear ranger cd ~ ;; 13) clear install gdu cd / clear gdu cd ~ ;; 14) clear install fzf cd / clear fzf cd ~ ;; 21) clear install cmatrix clear cmatrix ;; 22) clear install sl clear /usr/games/sl ;; 26) clear install bastet clear /usr/games/bastet ;; 27) clear install nsnake clear /usr/games/nsnake ;; 28) clear install ninvaders clear /usr/games/ninvaders ;; 31) clear install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger gdu fzf cmatrix sl bastet nsnake ninvaders ;; 32) clear remove htop iftop unzip tmux ffmpeg btop ranger gdu fzf cmatrix sl bastet nsnake ninvaders ;; 41) clear read -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname ;; 42) clear read -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 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 https://raw.gitmirror.com/ylx2016/Linux-NetSpeed/master/tcpx.sh chmod +x tcpx.sh ./tcpx.sh fi ;; 6) while true; do clear echo "▶ Docker管理器" echo "------------------------" echo "1. 安装更新Docker环境" echo "------------------------" echo "2. 查看Docker全局状态" echo "------------------------" echo "3. Docker容器管理 ▶" echo "4. Docker镜像管理 ▶" echo "5. Docker网络管理 ▶" echo "6. Docker卷管理 ▶" echo "------------------------" echo "7. 清理无用的docker容器和镜像网络数据卷" echo "------------------------" echo "8. 更换Docker源" echo "9. 编辑daemon.json文件" echo "------------------------" echo "11. 开启Docker-ipv6访问" echo "12. 关闭Docker-ipv6访问" echo "------------------------" echo "20. 卸载Docker环境" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install_add_docker ;; 2) clear echo "Docker版本" docker -v docker compose version echo "" echo "Docker镜像列表" docker image ls echo "" echo "Docker容器列表" docker ps -a echo "" echo "Docker卷列表" docker volume ls echo "" echo "Docker网络列表" docker network ls echo "" ;; 3) while true; do clear echo "Docker容器列表" docker ps -a echo "" echo "容器操作" echo "------------------------" echo "1. 创建新的容器" echo "------------------------" echo "2. 启动指定容器 6. 启动所有容器" echo "3. 停止指定容器 7. 暂停所有容器" echo "4. 删除指定容器 8. 删除所有容器" echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" echo "11. 进入指定容器 12. 查看容器日志 13. 查看容器网络" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "请输入创建命令: " dockername $dockername ;; 2) read -p "请输入容器名: " dockername docker start $dockername ;; 3) read -p "请输入容器名: " dockername docker stop $dockername ;; 4) read -p "请输入容器名: " dockername docker rm -f $dockername ;; 5) read -p "请输入容器名: " dockername docker restart $dockername ;; 6) docker start $(docker ps -a -q) ;; 7) docker stop $(docker ps -q) ;; 8) read -p "$(echo -e "${hong}确定删除所有容器吗?(Y/N): ${bai}")" choice case "$choice" in [Yy]) docker rm -f $(docker ps -a -q) ;; [Nn]) ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) docker restart $(docker ps -q) ;; 11) read -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) read -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" for container_id in $container_ids; do container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id") container_name=$(echo "$container_info" | awk '{print $1}') network_info=$(echo "$container_info" | cut -d' ' -f2-) while IFS= read -r line; do network_name=$(echo "$line" | awk '{print $1}') ip_address=$(echo "$line" | awk '{print $2}') printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address" done <<< "$network_info" done break_end ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 4) while true; do clear echo "Docker镜像列表" docker image ls echo "" echo "镜像操作" echo "------------------------" echo "1. 获取指定镜像 3. 删除指定镜像" echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "请输入镜像名: " dockername docker pull $dockername ;; 2) read -p "请输入镜像名: " dockername docker pull $dockername ;; 3) read -p "请输入镜像名: " dockername docker rmi -f $dockername ;; 4) read -p "$(echo -e "${hong}确定删除所有镜像吗?(Y/N): ${bai}")" choice case "$choice" in [Yy]) docker rmi -f $(docker images -q) ;; [Nn]) ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 5) while true; do clear echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" echo "------------------------------------------------------------" container_ids=$(docker ps -q) printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" for container_id in $container_ids; do container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id") container_name=$(echo "$container_info" | awk '{print $1}') network_info=$(echo "$container_info" | cut -d' ' -f2-) while IFS= read -r line; do network_name=$(echo "$line" | awk '{print $1}') ip_address=$(echo "$line" | awk '{print $2}') printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address" done <<< "$network_info" done echo "" echo "网络操作" echo "------------------------" echo "1. 创建网络" echo "2. 加入网络" echo "3. 退出网络" echo "4. 删除网络" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) read -p "加入网络名: " dockernetwork read -p "那些容器加入该网络: " dockername docker network connect $dockernetwork $dockername echo "" ;; 3) read -p "退出网络名: " dockernetwork read -p "那些容器退出该网络: " dockername docker network disconnect $dockernetwork $dockername echo "" ;; 4) read -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 6) while true; do clear echo "Docker卷列表" docker volume ls echo "" echo "卷操作" echo "------------------------" echo "1. 创建新卷" echo "2. 删除卷" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) read -p "输入删除卷名: " dockerjuan docker volume rm $dockerjuan ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 7) clear read -p "$(echo -e "${huang}确定清理无用的镜像容器网络吗?(Y/N): ${bai}")" choice case "$choice" in [Yy]) docker system prune -af --volumes ;; [Nn]) ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; 9) clear install nano mkdir -p /etc/docker && nano /etc/docker/daemon.json if command -v dnf &>/dev/null || command -v yum &>/dev/null; then systemctl restart docker else service docker restart fi ;; 11) clear docker_ipv6_on ;; 12) clear docker_ipv6_off ;; 20) clear read -p "$(echo -e "${hong}确定卸载docker环境吗?(Y/N): ${bai}")" choice case "$choice" in [Yy]) docker rm $(docker ps -a -q) && docker rmi $(docker images -q) && docker network prune remove docker > /dev/null 2>&1 ;; [Nn]) ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 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://hub.gitmirror.com/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 https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 ;; 12) while true; do clear echo "▶ 我的工作区" echo "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" echo "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" echo -e "${huang}注意: 进入工作区后使用Ctrl+b再单独按d,退出工作区!${bai}" echo "------------------------" echo "1. 1号工作区" echo "2. 2号工作区" echo "3. 3号工作区" echo "4. 4号工作区" echo "5. 5号工作区" echo "6. 6号工作区" echo "7. 7号工作区" echo "8. 8号工作区" echo "9. 9号工作区" echo "10. 10号工作区" echo "11. 自定义工作区" echo "------------------------" echo "99. 工作区状态管理" echo "------------------------" echo "0. 返回主菜单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install tmux SESSION_NAME="work1" tmux_run ;; 2) clear install tmux SESSION_NAME="work2" tmux_run ;; 3) clear install tmux SESSION_NAME="work3" tmux_run ;; 4) clear install tmux SESSION_NAME="work4" tmux_run ;; 5) clear install tmux SESSION_NAME="work5" tmux_run ;; 6) clear install tmux SESSION_NAME="work6" tmux_run ;; 7) clear install tmux SESSION_NAME="work7" tmux_run ;; 8) clear install tmux SESSION_NAME="work8" tmux_run ;; 9) clear install tmux SESSION_NAME="work9" tmux_run ;; 10) clear install tmux SESSION_NAME="work10" tmux_run ;; 11) clear install tmux clear echo "当前已存在的工作区列表" echo "------------------------" tmux list-sessions echo "------------------------" read -p "请输入您自定义的工作区名称,如1001 kj001 work10: " SESSION_NAME tmux_run ;; 99) while true; do clear echo "当前已存在的工作区列表" echo "------------------------" tmux list-sessions echo "------------------------" read -p "1. 删除指定工作区 0. 退出: " gongzuoqu_del case "$gongzuoqu_del" in 1) read -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name ;; 0) break ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac done ;; 0) kejilion ;; *) echo "无效的输入!" ;; esac break_end done ;; 13) while true; do clear echo "▶ 系统工具" echo "------------------------" echo "1. 设置脚本启动快捷键 2. 修改登录密码" echo "3. ROOT密码登录模式 4. 安装Python指定版本" echo "5. 开放所有端口 6. 修改SSH连接端口" echo "7. 优化DNS地址 8. 一键重装系统" echo "9. 禁用ROOT账户创建新账户 10. 切换优先ipv4/ipv6" echo "------------------------" echo "11. 查看端口占用状态 12. 修改虚拟内存大小" echo "13. 用户管理 14. 用户/密码生成器" echo "15. 系统时区调整 16. 设置BBR3加速" echo "17. 防火墙高级管理器 18. 修改主机名" echo "19. 切换系统更新源 20. 定时任务管理" echo "------------------------" echo "21. 本机host解析 22. fail2banSSH防御程序" echo "23. 限流自动关机 24. ROOT私钥登录模式" echo "25. TG-bot系统监控预警 26. 修复OoenSSH高危漏洞(岫源)" echo "------------------------" echo "31. 留言板 66. 一条龙系统调优" 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 ;; 3) root_use add_sshpasswd ;; 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}" ;; 5) root_use iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "端口已全部开放" ;; 6) root_use # 去掉 #Port 的注释 sed -i 's/#Port/Port/' /etc/ssh/sshd_config # 读取当前的 SSH 端口号 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') # 打印当前的 SSH 端口号 echo "当前的 SSH 端口号是: $current_port" echo "------------------------" # 提示用户输入新的 SSH 端口号 read -p "请输入新的 SSH 端口号: " new_port new_ssh_port ;; 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_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 'https://raw.gitmirror.com/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 'https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 ;; 9) root_use # 提示用户输入新用户名 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 # 禁用ROOT用户登录 passwd -l root echo "操作已完成。" ;; 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) 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 - https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 - https://raw.gitmirror.com/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 https://raw.gitmirror.com/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 ;; 17) root_use if dpkg -l | grep -q iptables-persistent; then while true; do echo "防火墙已安装" echo "------------------------" iptables -L INPUT echo "" echo "防火墙管理" echo "------------------------" echo "1. 开放指定端口 2. 关闭指定端口" echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" echo "5. IP白名单 6. IP黑名单" echo "7. 清除指定IP" echo "------------------------" echo "9. 卸载防火墙" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" read -p "请输入你的选择: " sub_choice case $sub_choice in 1) read -p "请输入开放的端口号: " o_port sed -i "/COMMIT/i -A INPUT -p tcp --dport $o_port -j ACCEPT" /etc/iptables/rules.v4 sed -i "/COMMIT/i -A INPUT -p udp --dport $o_port -j ACCEPT" /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4 ;; 2) read -p "请输入关闭的端口号: " c_port sed -i "/--dport $c_port/d" /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4 ;; 3) current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') cat > /etc/iptables/rules.v4 << EOF *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -i lo -j ACCEPT -A INPUT -p tcp --dport $current_port -j ACCEPT COMMIT EOF iptables-restore < /etc/iptables/rules.v4 ;; 4) current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') cat > /etc/iptables/rules.v4 << EOF *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -i lo -j ACCEPT -A INPUT -p tcp --dport $current_port -j ACCEPT COMMIT EOF iptables-restore < /etc/iptables/rules.v4 ;; 5) read -p "请输入放行的IP: " o_ip sed -i "/COMMIT/i -A INPUT -s $o_ip -j ACCEPT" /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4 ;; 6) read -p "请输入封锁的IP: " c_ip sed -i "/COMMIT/i -A INPUT -s $c_ip -j DROP" /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4 ;; 7) read -p "请输入清除的IP: " d_ip sed -i "/-A INPUT -s $d_ip/d" /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4 ;; 9) remove iptables-persistent rm /etc/iptables/rules.v4 break ;; 0) break # 跳出循环,退出菜单 ;; *) break # 跳出循环,退出菜单 ;; esac done else clear echo "将为你安装防火墙,该防火墙仅支持Debian/Ubuntu" 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 clear iptables_open remove iptables-persistent ufw rm /etc/iptables/rules.v4 apt update -y && apt install -y iptables-persistent current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') cat > /etc/iptables/rules.v4 << EOF *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -i lo -j ACCEPT -A INPUT -p tcp --dport $current_port -j ACCEPT COMMIT EOF iptables-restore < /etc/iptables/rules.v4 systemctl enable netfilter-persistent echo "防火墙安装完成" ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac fi ;; 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://hub.gitmirror.com/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 https://raw.gitmirror.com/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 ;; 24) root_use echo "ROOT私钥登录模式" echo "------------------------------------------------" echo "将会生成密钥对,更安全的方式SSH登录" read -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) clear add_sshkey ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 25) root_use echo "TG-bot监控预警功能" echo "------------------------------------------------" echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" echo "到达阈值后会向用户发预警消息" echo -e "${hui}-关于流量,重启服务器将重新计算-${bai}" read -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) cd ~ install nano tmux bc jq if [ -f ~/TG-check-notify.sh ]; then chmod +x ~/TG-check-notify.sh nano ~/TG-check-notify.sh else curl -sS -O https://raw.gitmirror.com/kejilion/sh/main/TG-check-notify.sh chmod +x ~/TG-check-notify.sh nano ~/TG-check-notify.sh fi tmux kill-session -t TG-check-notify > /dev/null 2>&1 tmux new -d -s TG-check-notify "~/TG-check-notify.sh" crontab -l | grep -v '~/TG-check-notify.sh' | crontab - > /dev/null 2>&1 (crontab -l ; echo "@reboot tmux new -d -s TG-check-notify '~/TG-check-notify.sh'") | crontab - > /dev/null 2>&1 curl -sS -O https://raw.gitmirror.com/kejilion/sh/main/TG-SSH-check-notify.sh > /dev/null 2>&1 sed -i "3i$(grep '^TELEGRAM_BOT_TOKEN=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh > /dev/null 2>&1 sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh # 添加到 ~/.profile 文件中 if ! grep -q 'bash ~/TG-SSH-check-notify.sh' ~/.profile; then echo 'bash ~/TG-SSH-check-notify.sh' >> ~/.profile fi source ~/.profile clear echo "TG-bot预警系统已启动" echo -e "${hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${bai}" ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use cd ~ curl -sS -O https://raw.gitmirror.com/kejilion/sh/main/upgrade_openssh9.8p1.sh chmod +x ~/upgrade_openssh9.8p1.sh ~/upgrade_openssh9.8p1.sh rm -f ~/upgrade_openssh9.8p1.sh ;; 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 "留言板操作完成。" ;; 66) root_use echo "一条龙系统调优" echo "------------------------------------------------" echo "将对以下内容进行操作与优化" echo "1. 更新系统到最新" echo "2. 清理系统垃圾文件" echo -e "3. 设置虚拟内存${huang}1G${bai}" echo -e "4. 设置SSH端口号为${huang}5522${bai}" echo -e "5. 开放所有端口" echo -e "6. 开启${huang}BBR${bai}加速" echo -e "7. 设置时区到${huang}上海${bai}" echo -e "8. 优化DNS地址到${huang}1111 8888${bai}" echo -e "9. 安装常用工具${huang}docker wget sudo tar unzip socat btop${bai}" echo "------------------------------------------------" read -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear echo "------------------------------------------------" linux_update echo -e "[${lv}OK${bai}] 1/9. 更新系统到最新" echo "------------------------------------------------" linux_clean echo -e "[${lv}OK${bai}] 2/9. 清理系统垃圾文件" echo "------------------------------------------------" new_swap=1024 add_swap echo -e "[${lv}OK${bai}] 3/9. 设置虚拟内存${huang}1G${bai}" echo "------------------------------------------------" new_port=5522 new_ssh_port echo -e "[${lv}OK${bai}] 4/9. 设置SSH端口号为${huang}5522${bai}" echo "------------------------------------------------" echo -e "[${lv}OK${bai}] 5/9. 开放所有端口" echo "------------------------------------------------" bbr_on echo -e "[${lv}OK${bai}] 6/9. 开启${huang}BBR${bai}加速" echo "------------------------------------------------" set_timedate Asia/Shanghai echo -e "[${lv}OK${bai}] 7/9. 设置时区到${huang}上海${bai}" echo "------------------------------------------------" 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 echo -e "[${lv}OK${bai}] 8/9. 优化DNS地址到${huang}1111 8888${bai}" echo "------------------------------------------------" install_add_docker install wget sudo tar unzip socat btop echo -e "[${lv}OK${bai}] 9/9. 安装常用工具${huang}docker wget sudo tar unzip socat btop${bai}" echo "------------------------------------------------" echo -e "${lv}一条龙系统调优已完成${bai}" ;; [Nn]) echo "已取消" ;; *) echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 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 "14. 安装docker 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 ;; 14) py_task=install_docker.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 https://raw.gitmirror.com/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 "全部日志: https://raw.gitmirror.com/kejilion/sh/main/kejilion_sh_log.txt" echo "------------------------" curl -s https://raw.gitmirror.com/kejilion/sh/main/kejilion_sh_log.txt | tail -n 35 sh_v_new=$(curl -s https://raw.gitmirror.com/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 https://raw.gitmirror.com/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