- 移除 Docker 管理、监控通知、后台工作区、防火墙及旧版 SSH 工具 - 删除废弃脚本、配置、本地化文件及 PandoraNext 文件 - 增加可配置的 GitHub Raw 地址,并根据服务器地区自动选择镜像 - 更新功能文档,使其与精简后的工具集保持一致
2356 lines
76 KiB
Bash
2356 lines
76 KiB
Bash
#!/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
|
||
|
||
|