更新 03

This commit is contained in:
2026-01-25 14:21:07 +08:00
parent 8b27e9ada7
commit 6468c298da

237
03
View File

@@ -1,125 +1,99 @@
#!/bin/bash
# ================= 核心配置区域 =================
# 1. 设置版本号 (修改此处即可控制下载版本)
# ================= 配置区域 =================
VERSION="1.1.15"
# 2. 官方标准数据目录 (不要改动,这是 RustDesk 的默认位置)
DATA_DIR="/var/lib/rustdesk-server"
BACKUP_DIR="/tmp/rustdesk_backup_$(date +%s)"
# ===========================================
# 3. 下载链接 (自动适配上方版本号)
# 主源:你的私有源
URL_HBBS_PRIMARY="https://cloudreve.vps3344521.xyz/f/W9tx/rustdesk-server-hbbs_${VERSION}_amd64.deb"
URL_HBBR_PRIMARY="https://cloudreve.vps3344521.xyz/f/j3fJ/rustdesk-server-hbbr_${VERSION}_amd64.deb"
# 备用源GitHub (防止私有源挂掉)
URL_HBBS_FALLBACK="https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION}/rustdesk-server-hbbs_${VERSION}_amd64.deb"
URL_HBBR_FALLBACK="https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION}/rustdesk-server-hbbr_${VERSION}_amd64.deb"
# ===============================================
echo "========================================================"
echo " RustDesk Server 全能修复脚本 (安装/转移/修复/启动)"
echo "========================================================"
# --- 功能: 检测安装并询问是否卸载重装 ---
echo "正在检查系统状态..."
# --- 1. 智能查找并备份/转移现有的密钥 ---
echo ">>> [1/7] 正在扫描并搜集现有的密钥文件..."
mkdir -p "$BACKUP_DIR"
if systemctl list-unit-files | grep -q "rustdesk-hbbs.service"; then
echo "------------------------------------------------"
echo "⚠️ 检测到系统已安装 RustDesk Server"
echo "------------------------------------------------"
read -p "是否卸载当前版本并重新安装?(输入 y 确认重装,输入 n 退出): " choice
case "$choice" in
y|Y )
echo ">>> 正在停止服务..."
systemctl stop rustdesk-hbbs rustdesk-hbbr
systemctl disable rustdesk-hbbs rustdesk-hbbr
echo ">>> 正在卸载程序..."
dpkg -P rustdesk-server-hbbs rustdesk-server-hbbr
apt-get purge -y rustdesk-server-hbbs rustdesk-server-hbbr
# 询问是否清空数据
echo "------------------------------------------------"
echo "注意:官方数据目录为 $DATA_DIR"
read -p "是否清空旧的 Key 和数据库?(y/n) [推荐 y 以防冲突]: " del_data
if [[ "$del_data" == "y" || "$del_data" == "Y" ]]; then
rm -rf "$DATA_DIR"
echo ">>> 旧数据已清除。"
else
echo ">>> 旧数据已保留。"
fi
echo ">>> 卸载完成,准备重新安装..."
sleep 2
;;
* )
echo ">>> 操作已取消,脚本退出。"
exit 0
;;
esac
fi
# ================== 安装流程 ==================
# 1. 基础环境修复与依赖安装
echo ">>> [1/6] 正在配置基础环境..."
apt-get update -q
# 增加 ufw 用于防火墙管理dnsutils 用于网络查询
apt-get install -y curl wget lsof ufw dnsutils
# 2. 智能获取公网 IP (双重保险)
echo ">>> [2/6] 正在获取公网 IP..."
HOST_IP=$(curl -s4 --connect-timeout 5 ifconfig.me)
if [ -z "$HOST_IP" ]; then
echo " 备用方案启动:尝试通过 ip.sb 获取..."
HOST_IP=$(curl -s4 --connect-timeout 5 ip.sb)
fi
if [ -z "$HOST_IP" ]; then
echo "❌ 错误:无法获取公网 IP请检查网络连接。"
exit 1
fi
echo " 获取成功: $HOST_IP"
# 3. 下载安装包 (自动重试)
echo ">>> [3/6] 正在下载安装包 (版本: $VERSION)..."
# 下载函数
download_pkg() {
local name=$1
local url_pri=$2
local url_sec=$3
echo " 正在下载 $name..."
wget -O "$name.deb" "$url_pri"
# 检查文件是否有效(大于 1KB
if [ ! -s "$name.deb" ] || [ $(stat -c%s "$name.deb") -lt 1000 ]; then
echo " ⚠️ 主源下载失败,切换备用源..."
rm -f "$name.deb"
wget -O "$name.deb" "$url_sec"
fi
if [ ! -s "$name.deb" ]; then
echo "❌ 错误:$name 下载彻底失败,请检查链接。"
exit 1
# 定义查找函数
save_files() {
local src_dir=$1
if [ -f "${src_dir}/id_ed25519.pub" ]; then
echo " 发现密钥在: ${src_dir}"
cp "${src_dir}/id_ed25519" "$BACKUP_DIR/" 2>/dev/null
cp "${src_dir}/id_ed25519.pub" "$BACKUP_DIR/" 2>/dev/null
cp "${src_dir}/db_v2.sqlite3" "$BACKUP_DIR/" 2>/dev/null
# 标记为已找到
FOUND_KEYS=1
fi
}
download_pkg "hbbs" "$URL_HBBS_PRIMARY" "$URL_HBBS_FALLBACK"
download_pkg "hbbr" "$URL_HBBR_PRIMARY" "$URL_HBBR_FALLBACK"
# A. 检查官方目录 (是否有残留)
save_files "$DATA_DIR"
# B. 检查 Root 目录 (你刚才手动运行产生的地方)
save_files "/root"
# C. 检查当前目录
save_files "$(pwd)"
if [ "$FOUND_KEYS" == "1" ]; then
echo "✅ 已成功提取密钥和数据,稍后会自动归位。"
else
echo "⚠️ 未扫描到现有密钥,安装后将生成新的。"
fi
# --- 2. 彻底卸载与清理 ---
echo ">>> [2/7] 正在清理旧环境..."
systemctl stop rustdesk-hbbs rustdesk-hbbr 2>/dev/null
systemctl disable rustdesk-hbbs rustdesk-hbbr 2>/dev/null
dpkg -P rustdesk-server-hbbs rustdesk-server-hbbr 2>/dev/null
rm -rf "$DATA_DIR" # 已经备份过了,这里彻底清空保证环境纯净
# --- 3. 环境准备与 IP 获取 ---
echo ">>> [3/7] 正在准备基础环境..."
apt-get update -q
apt-get install -y curl wget lsof ufw dnsutils
echo " 正在获取公网 IP..."
HOST_IP=$(curl -s4 --connect-timeout 5 ifconfig.me)
[ -z "$HOST_IP" ] && HOST_IP=$(curl -s4 --connect-timeout 5 ip.sb)
if [ -z "$HOST_IP" ]; then
echo "❌ 错误:无法获取公网 IP请检查网络。"
exit 1
fi
echo " 公网 IP: $HOST_IP"
# --- 4. 下载与安装 ---
echo ">>> [4/7] 正在下载并安装..."
URL_HBBS="https://cloudreve.vps3344521.xyz/f/W9tx/rustdesk-server-hbbs_${VERSION}_amd64.deb"
URL_HBBR="https://cloudreve.vps3344521.xyz/f/j3fJ/rustdesk-server-hbbr_${VERSION}_amd64.deb"
# 下载 (带重试逻辑)
wget -O hbbs.deb "$URL_HBBS" || wget -O hbbs.deb "https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION}/rustdesk-server-hbbs_${VERSION}_amd64.deb"
wget -O hbbr.deb "$URL_HBBR" || wget -O hbbr.deb "https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION}/rustdesk-server-hbbr_${VERSION}_amd64.deb"
# 4. 安装
echo ">>> [4/6] 正在安装软件包..."
dpkg -i hbbs.deb hbbr.deb
apt-get install -f -y
# 自动清理安装包
rm -f hbbs.deb hbbr.deb
# 5. 服务配置 (锁定官方路径,但修正启动参数)
echo ">>> [5/6] 正在配置系统服务..."
# 确保目录存在且权限正确
# --- 5. 密钥归位与权限修复 (核心步骤) ---
echo ">>> [5/7] 正在将密钥转移至官方目录..."
mkdir -p "$DATA_DIR"
chown -R root:root "$DATA_DIR"
# 写入服务文件 (覆盖到 /etc优先级高于默认安装的 /lib)
# 使用 Standard Output 和 Error 重定向,方便排错
if [ "$FOUND_KEYS" == "1" ]; then
cp -f "$BACKUP_DIR/"* "$DATA_DIR/"
echo "✅ 密钥已成功迁移回 $DATA_DIR"
# 清理刚才手动在 /root 生成的垃圾文件,保持系统整洁
rm -f /root/id_ed25519 /root/id_ed25519.pub /root/db_v2.sqlite3
else
echo " 无旧密钥,系统将自动生成。"
fi
# 统一修复权限 (非常重要,否则服务起不来)
chown -R root:root "$DATA_DIR"
chmod 755 "$DATA_DIR"
# --- 6. 配置服务 (锁定官方路径) ---
echo ">>> [6/7] 正在配置系统服务..."
cat > /etc/systemd/system/rustdesk-hbbs.service <<EOF
[Unit]
Description=RustDesk ID Server
@@ -156,49 +130,38 @@ RestartSec=10
WantedBy=multi-user.target
EOF
# 6. 防火墙配置 (新增优化)
echo ">>> [6/6] 正在优化防火墙端口..."
# 放行端口
if command -v ufw > /dev/null; then
ufw allow 21115:21119/tcp
ufw allow 21116/udp
echo " UFW 防火墙规则已添加。"
else
echo " 未检测到 UFW跳过防火墙配置。"
fi
# 启动服务
# --- 7. 启动与验证 ---
echo ">>> [7/7] 正在启动服务..."
systemctl daemon-reload
systemctl enable --now rustdesk-hbbs rustdesk-hbbr
# ================= 结果展示与 Key 等待 =================
echo "------------------------------------------------"
echo "✅ RustDesk 安装并启动完成!"
echo " 安装位置: 官方默认 (/usr/bin)"
echo " 数据位置: $DATA_DIR"
echo "------------------------------------------------"
echo "⏳ 正在等待 Key 文件生成 (最多等待 30 秒)..."
echo "✅ 修复完成!密钥已锁定在官方目录: $DATA_DIR"
echo "⏳ 正在读取密钥..."
PUB_KEY="${DATA_DIR}/id_ed25519.pub"
MAX_RETRIES=30
COUNT=0
# 循环检测 Key 是否生成
while [ ! -f "$PUB_KEY" ]; do
sleep 1
((COUNT++))
if [ "$COUNT" -ge "$MAX_RETRIES" ]; then
echo "⚠️ 等待超时Key 文件尚未生成。"
echo "请稍后手动查看: cat $PUB_KEY"
exit 0
# 循环等待确保文件生成/存在
for i in {1..10}; do
if [ -f "$PUB_KEY" ]; then
break
fi
echo -ne "."
sleep 1
done
echo ""
# 成功获取
echo "------------------------------------------------"
echo "🎉 你的 Key (公钥) 为:"
echo ""
echo -e "\033[32m$(cat "$PUB_KEY")\033[0m"
echo ""
echo "------------------------------------------------"
if [ -f "$PUB_KEY" ]; then
echo "------------------------------------------------"
echo "🎉 你的 Key (公钥) 为:"
echo ""
echo -e "\033[32m$(cat "$PUB_KEY")\033[0m"
echo ""
echo "------------------------------------------------"
else
echo "❌ 警告:服务似乎启动失败,未检测到 Key 文件。"
echo "请运行 journalctl -u rustdesk-hbbs -n 20 查看错误日志。"
fi