服务器备份脚本

这是一个用于Linux服务器的自动备份脚本,主要用于备份服务器上的重要配置文件和目录。脚本会自动检查并安装必要的工具,然后将指定的文件和目录打包并传输到本地电脑。

功能特点

  1. 自动检查并安装 lrzsz(用于文件传输)
  2. 备份以下内容:
    • /root/3xui 目录
    • /root/.acme.sh 目录
    • /root/alist 目录
    • /root/nginx 目录
    • /root/.ssh/authorized_keys 文件
    • crontab 定时任务配置
  3. 自动压缩所有备份文件
  4. 使用sz命令传输到本地
  5. 自动清理临时文件

备份脚本

#!/bin/bash

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then 
    echo "请使用root用户运行此脚本"
    exit 1
fi

# 检查是否安装了sudo
if ! command -v sudo &> /dev/null; then
    echo "系统未安装sudo,请先安装sudo"
    exit 1
fi

# 切换到root目录
cd /root || exit 1

# 检查是否安装了lrzsz
if ! command -v sz &> /dev/null || ! command -v rz &> /dev/null; then
    echo "正在安装lrzsz..."
    if command -v apt &> /dev/null; then
        sudo apt update && sudo apt install -y lrzsz
    elif command -v yum &> /dev/null; then
        sudo yum install -y lrzsz
    else
        echo "无法识别的包管理器,请手动安装lrzsz"
        exit 1
    fi
fi

# 创建临时目录
BACKUP_DIR="/tmp/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# 备份指定目录
echo "开始备份文件..."
for dir in "3xui" ".acme.sh" "alist" "nginx"; do
    if [ -d "/root/$dir" ]; then
        cp -r "/root/$dir" "$BACKUP_DIR/"
    fi
done

# 备份authorized_keys
if [ -f "/root/.ssh/authorized_keys" ]; then
    mkdir -p "$BACKUP_DIR/.ssh"
    cp "/root/.ssh/authorized_keys" "$BACKUP_DIR/.ssh/"
fi

# 备份crontab配置
crontab -l > "$BACKUP_DIR/crontab.txt"

# 创建压缩包
BACKUP_FILE="server_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
cd /tmp
tar -czf "$BACKUP_FILE" "backup_$(date +%Y%m%d_%H%M%S)"

# 检查文件大小(以字节为单位)
FILE_SIZE=$(stat -f%z "$BACKUP_FILE" 2>/dev/null || stat -c%s "$BACKUP_FILE")
SIZE_LIMIT=$((4 * 1024 * 1024 * 1024)) # 4GB in bytes

if [ "$FILE_SIZE" -gt "$SIZE_LIMIT" ]; then
    echo "警告:备份文件大小超过4GB(当前大小:$(($FILE_SIZE / 1024 / 1024))MB)"
    echo "请使用以下命令从本地计算机手动下载备份文件:"
    echo "scp root@<服务器IP>:$PWD/$BACKUP_FILE ."
    echo "文件将保留在服务器上,请手动下载完成后删除"
    exit 0
else
    echo "正在使用sz发送文件..."
    sz "$BACKUP_FILE"
    # 清理临时文件
    rm -rf "$BACKUP_DIR"
    rm -f "$BACKUP_FILE"
fi

echo "备份完成!"

备份脚本使用方法

  1. 创建脚本文件:
nano backup.sh
  1. 复制备份脚本内容到文件中

  2. 添加执行权限:

chmod +x backup.sh
  1. 以root用户运行脚本:
sudo ./backup.sh
  1. 注意事项:
    • 如果备份文件大于4GB,脚本会提供scp命令供手动下载
    • 使用scp下载后请记得手动删除服务器上的备份文件

服务器初始化脚本

这个脚本用于新服务器的初始化设置,包括安装必要的软件包、Docker环境,配置SSH安全设置,以及恢复之前的备份。

初始化脚本

#!/bin/bash

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then 
    echo "请使用root用户运行此脚本"
    exit 1
fi

# 切换到root目录
cd /root || exit 1

echo "开始初始化服务器..."

# 更新软件包
echo "正在更新软件包..."
if command -v apt &> /dev/null; then
    apt update && apt upgrade -y
elif command -v yum &> /dev/null; then
    yum update -y
else
    echo "无法识别的包管理器"
    exit 1
fi

# 安装必要的软件包
echo "正在安装必要的软件包..."
if command -v apt &> /dev/null; then
    apt install -y tree lrzsz p7zip-full sudo curl wget
elif command -v yum &> /dev/null; then
    yum install -y tree lrzsz p7zip sudo curl wget
fi

# 安装Docker
echo "正在安装Docker..."
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
rm get-docker.sh

# 安装Docker Compose
echo "正在安装Docker Compose..."
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

echo "请上传备份文件(格式:server_backup_YYYYMMDD_HHMMSS.tar.gz)"
echo "如果文件大于4GB,请使用以下命令从本地上传:"
echo "scp <本地备份文件路径> root@<服务器IP>:/root/"
echo "上传完成后按回车继续..."
read -r

# 查找最新的备份文件
BACKUP_FILE=$(ls -t server_backup_*.tar.gz | head -n1)
if [ -z "$BACKUP_FILE" ]; then
    echo "未找到备份文件"
    exit 1
fi

echo "找到备份文件:$BACKUP_FILE"

# 解压备份文件
echo "正在解压备份文件..."
tar -xzf "$BACKUP_FILE" -C /root
rm "$BACKUP_FILE"

# 配置SSH安全设置
echo "正在配置SSH安全设置..."
SSH_CONFIG="/etc/ssh/sshd_config"
# 备份原始配置
cp "$SSH_CONFIG" "${SSH_CONFIG}.bak"

# 修改SSH配置
sed -i 's/#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' "$SSH_CONFIG"
sed -i 's/#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' "$SSH_CONFIG"
sed -i 's/#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSH_CONFIG"

# 创建新用户(如果不存在)
NEW_USER="admin"
if ! id "$NEW_USER" &>/dev/null; then
    useradd -m -s /bin/bash "$NEW_USER"
    usermod -aG sudo "$NEW_USER"
    echo "已创建管理员用户:$NEW_USER"
fi

# 恢复SSH密钥
if [ -f "/root/backup_*/authorized_keys" ]; then
    echo "正在恢复SSH密钥..."
    # 恢复root用户的SSH密钥
    mkdir -p "/root/.ssh"
    cp "/root/backup_*/authorized_keys" "/root/.ssh/"
    chmod 700 "/root/.ssh"
    chmod 600 "/root/.ssh/authorized_keys"
    
    # 同时为新用户配置SSH密钥
    mkdir -p "/home/$NEW_USER/.ssh"
    cp "/root/backup_*/authorized_keys" "/home/$NEW_USER/.ssh/"
    chmod 700 "/home/$NEW_USER/.ssh"
    chmod 600 "/home/$NEW_USER/.ssh/authorized_keys"
    chown -R "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.ssh"
else
    echo "警告:未找到SSH密钥文件,请手动配置SSH密钥"
    exit 1
fi

# 重启SSH服务
systemctl restart sshd

# 恢复crontab配置
if [ -f "/root/backup_*/crontab.txt" ]; then
    echo "正在恢复crontab配置..."
    crontab /root/backup_*/crontab.txt
fi

# 启动Docker Compose服务
echo "正在启动Docker Compose服务..."
if [ -f "/root/3xui/docker-compose.yml" ]; then
    cd /root/3xui && docker-compose up -d
fi

if [ -f "/root/alist/docker-compose.yml" ]; then
    cd /root/alist && docker-compose up -d
fi

# 启动Docker Compose nginx服务
if [ -f "/root/nginx/docker-compose.yml" ]; then
    cd /root/nginx && docker-compose up -d
fi

echo "初始化完成!"
echo "重要提示:"
echo "1. 已禁用所有用户的密码登录"
echo "2. root和${NEW_USER}用户都可以使用SSH密钥登录"
echo "3. 已创建新管理员用户:$NEW_USER"
echo "4. 登录方式:"
echo "   - root用户:ssh root@<服务器IP>"
echo "   - 普通用户:ssh $NEW_USER@<服务器IP>"

初始化脚本使用方法

  1. 创建脚本文件:
nano init.sh
  1. 复制初始化脚本内容到文件中

  2. 添加执行权限:

chmod +x init.sh
  1. 以root用户运行脚本:
sudo ./init.sh
  1. 注意事项:
    • 脚本必须以root用户运行
    • 确保服务器上已安装必要的软件包(脚本会自动安装)
    • 如果备份文件大于4GB,请使用scp命令手动上传
    • 确保上传的备份文件格式正确(server_backup_YYYYMMDD_HHMMSS.tar.gz)
    • Docker Compose服务只会启动存在配置文件的服务