服务器备份脚本
这是一个用于Linux服务器的自动备份脚本,主要用于备份服务器上的重要配置文件和目录。脚本会自动检查并安装必要的工具,然后将指定的文件和目录打包并传输到本地电脑。
功能特点
- 自动检查并安装 lrzsz(用于文件传输)
- 备份以下内容:
- /root/3xui 目录
- /root/.acme.sh 目录
- /root/alist 目录
- /root/nginx 目录
- /root/.ssh/authorized_keys 文件
- crontab 定时任务配置
- 自动压缩所有备份文件
- 使用sz命令传输到本地
- 自动清理临时文件
备份脚本
#!/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 "备份完成!"
备份脚本使用方法
- 创建脚本文件:
nano backup.sh
-
复制备份脚本内容到文件中
-
添加执行权限:
chmod +x backup.sh
- 以root用户运行脚本:
sudo ./backup.sh
- 注意事项:
- 如果备份文件大于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>"
初始化脚本使用方法
- 创建脚本文件:
nano init.sh
-
复制初始化脚本内容到文件中
-
添加执行权限:
chmod +x init.sh
- 以root用户运行脚本:
sudo ./init.sh
- 注意事项:
- 脚本必须以root用户运行
- 确保服务器上已安装必要的软件包(脚本会自动安装)
- 如果备份文件大于4GB,请使用scp命令手动上传
- 确保上传的备份文件格式正确(server_backup_YYYYMMDD_HHMMSS.tar.gz)
- Docker Compose服务只会启动存在配置文件的服务