fix: 加固 init-debian.sh 并清理数据包
- init-debian.sh: 权限归一化(fix_data_permissions)、apt软链修复、 用户创建错误检查、sshd/目录处理加固、密码安全(sshpass -e/base64)、 tar路径穿越防护、失败任务汇总、日志输出 - data.tar.gz: 移除 openlist/ocsp/ofcss_cf 等冗余文件,letsencrypt.json 移至 vols/certs 与 traefik storage 路径对齐
This commit is contained in:
LFS
BIN
Binary file not shown.
+119
-42
@@ -90,8 +90,7 @@ accept_ssh_host_key() {
|
|||||||
|
|
||||||
log_info "自动接受 SSH host key..."
|
log_info "自动接受 SSH host key..."
|
||||||
# 使用 ssh-keyscan 获取并添加 host key
|
# 使用 ssh-keyscan 获取并添加 host key
|
||||||
ssh-keyscan -p "$port" "$host" >> "$known_hosts_file" 2>/dev/null
|
if ssh-keyscan -p "$port" "$host" >> "$known_hosts_file" 2>/dev/null; then
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
chown kairee:kairee "$known_hosts_file"
|
chown kairee:kairee "$known_hosts_file"
|
||||||
chmod 600 "$known_hosts_file"
|
chmod 600 "$known_hosts_file"
|
||||||
log_success "SSH host key 已添加"
|
log_success "SSH host key 已添加"
|
||||||
@@ -108,15 +107,20 @@ if [[ $EUID -ne 0 ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 输出同时写入日志文件,便于远程运行失败时回溯
|
||||||
|
LOG_FILE="/var/log/init-debian.log"
|
||||||
|
exec > >(tee -a "$LOG_FILE") 2>&1
|
||||||
|
log_info "日志文件: $LOG_FILE"
|
||||||
|
|
||||||
# 提示输入 kairee 用户密码
|
# 提示输入 kairee 用户密码
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "Debian 系统初始化脚本"
|
echo "Debian 系统初始化脚本"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo
|
echo
|
||||||
echo "请输入要为用户 'kairee' 设置的密码:"
|
echo "请输入要为用户 'kairee' 设置的密码:"
|
||||||
read -s -p "密码: " USER_PASSWORD
|
read -rs -p "密码: " USER_PASSWORD
|
||||||
echo
|
echo
|
||||||
read -s -p "确认密码: " USER_PASSWORD_CONFIRM
|
read -rs -p "确认密码: " USER_PASSWORD_CONFIRM
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 验证密码
|
# 验证密码
|
||||||
@@ -141,8 +145,17 @@ task_1_create_user() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /data/home
|
mkdir -p /data/home
|
||||||
useradd -m -d /data/home/kairee -s /bin/bash -u 1000 -U kairee
|
if ! useradd -m -d /data/home/kairee -s /bin/bash -u 1000 -U kairee; then
|
||||||
echo "kairee:$USER_PASSWORD" | chpasswd
|
log_error "创建用户 'kairee' 失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! chpasswd <<< "kairee:$USER_PASSWORD"; then
|
||||||
|
log_error "设置密码失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 700 /data/home/kairee
|
||||||
log_success "用户 'kairee' 创建成功 (uid=1000, 家目录: /data/home/kairee)"
|
log_success "用户 'kairee' 创建成功 (uid=1000, 家目录: /data/home/kairee)"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -158,7 +171,7 @@ task_2_download_data() {
|
|||||||
if [ "$DATA_URL" = "https://example.com/path/to/data.tar.gz" ]; then
|
if [ "$DATA_URL" = "https://example.com/path/to/data.tar.gz" ]; then
|
||||||
log_warning "未设置 DATA_URL,跳过下载步骤"
|
log_warning "未设置 DATA_URL,跳过下载步骤"
|
||||||
log_warning "你可以手动将 data 目录复制到 /data"
|
log_warning "你可以手动将 data 目录复制到 /data"
|
||||||
return 0
|
return 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TEMP_FILE=$(mktemp)
|
TEMP_FILE=$(mktemp)
|
||||||
@@ -169,6 +182,13 @@ task_2_download_data() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 路径穿越防护:拒绝包含绝对路径或 .. 路径的归档
|
||||||
|
if tar -tzf "$TEMP_FILE" | grep -qE '(^|/)\.\.(/|$)|^/'; then
|
||||||
|
log_error "归档包含绝对路径或 .. 路径,已拒绝解压"
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
log_info "解压到 /data..."
|
log_info "解压到 /data..."
|
||||||
mkdir -p /data
|
mkdir -p /data
|
||||||
if ! tar -xzf "$TEMP_FILE" -C /; then
|
if ! tar -xzf "$TEMP_FILE" -C /; then
|
||||||
@@ -178,14 +198,43 @@ task_2_download_data() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
|
|
||||||
|
# 归一化权限,修复归档中携带的 777/666 等异常权限
|
||||||
|
fix_data_permissions
|
||||||
|
|
||||||
log_success "数据包下载并解压完成"
|
log_success "数据包下载并解压完成"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 归一化 /data 权限:目录 755、普通文件 644、脚本 755;并修正 kairee 家目录与 SSH 权限
|
||||||
|
fix_data_permissions() {
|
||||||
|
if [ ! -d /data ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "归一化 /data 权限(目录 755,文件 644,脚本 755)..."
|
||||||
|
|
||||||
|
find /data -type d -exec chmod 755 {} +
|
||||||
|
find /data -type f -exec chmod 644 {} +
|
||||||
|
find /data -type f \( -path "/data/scripts/*" -o -name "*.sh" \) -exec chmod 755 {} +
|
||||||
|
|
||||||
|
if id "kairee" &>/dev/null && [ -d /data/home/kairee ]; then
|
||||||
|
log_info "修正 kairee 家目录与 SSH 权限..."
|
||||||
|
chown -R kairee:kairee /data/home/kairee
|
||||||
|
chmod 700 /data/home/kairee
|
||||||
|
chmod 700 /data/home/kairee/.ssh 2>/dev/null
|
||||||
|
chmod 600 /data/home/kairee/.ssh/id_ed25519 2>/dev/null
|
||||||
|
chmod 600 /data/home/kairee/.ssh/known_hosts 2>/dev/null
|
||||||
|
chmod 644 /data/home/kairee/.ssh/id_ed25519.pub 2>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "/data 权限归一化完成"
|
||||||
|
}
|
||||||
|
|
||||||
task_3_install_packages() {
|
task_3_install_packages() {
|
||||||
apt-get update || return 1
|
apt-get update || return 1
|
||||||
apt-get install --no-install-recommends -y sudo vim rsync curl sshpass cron || return 1
|
apt-get install --no-install-recommends -y sudo vim rsync curl sshpass cron || return 1
|
||||||
apt-get reinstall -y openssl openssh-server || return 1
|
apt-get install -y --reinstall openssl openssh-server || return 1
|
||||||
log_success "基础软件包安装完成"
|
log_success "基础软件包安装完成"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -228,11 +277,7 @@ task_5_configure_apt() {
|
|||||||
filename=$(basename "$src_file")
|
filename=$(basename "$src_file")
|
||||||
target_file="/etc/apt/sources.list.d/$filename"
|
target_file="/etc/apt/sources.list.d/$filename"
|
||||||
|
|
||||||
if [ -L "$target_file" ]; then
|
ln -sf "$src_file" "$target_file"
|
||||||
rm -f "$target_file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ln -s "$src_file" "$target_file"
|
|
||||||
log_success "创建软链接: $src_file -> $target_file"
|
log_success "创建软链接: $src_file -> $target_file"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -254,6 +299,12 @@ task_6_configure_docker() {
|
|||||||
|
|
||||||
ln -sf /data/etc/docker/daemon.json /etc/docker/daemon.json
|
ln -sf /data/etc/docker/daemon.json /etc/docker/daemon.json
|
||||||
log_success "创建 Docker daemon 配置软链接"
|
log_success "创建 Docker daemon 配置软链接"
|
||||||
|
|
||||||
|
if command -v docker >/dev/null 2>&1 && systemctl restart docker 2>/dev/null; then
|
||||||
|
log_success "Docker 已重启,新配置已生效"
|
||||||
|
else
|
||||||
|
log_warning "Docker 重启失败,配置将在 Docker 下次启动时生效"
|
||||||
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,6 +322,11 @@ task_7_configure_ssh() {
|
|||||||
ln -sf /data/etc/ssh/sshd_config /etc/ssh/sshd_config
|
ln -sf /data/etc/ssh/sshd_config /etc/ssh/sshd_config
|
||||||
log_success "创建 SSH 配置软链接"
|
log_success "创建 SSH 配置软链接"
|
||||||
|
|
||||||
|
if ! sshd -t; then
|
||||||
|
log_error "sshd 配置语法检查失败,已跳过重启"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
systemctl restart sshd || systemctl restart ssh
|
systemctl restart sshd || systemctl restart ssh
|
||||||
log_success "SSH 服务已重启"
|
log_success "SSH 服务已重启"
|
||||||
return 0
|
return 0
|
||||||
@@ -301,8 +357,8 @@ task_10_create_home_link() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e "/home/kairee" ] && [ ! -L "/home/kairee" ]; then
|
if [ -e "/home/kairee" ] && [ ! -L "/home/kairee" ]; then
|
||||||
log_warning "/home/kairee 已存在但不是软链接,将被删除并重新创建"
|
log_warning "/home/kairee 已存在但不是软链接,将被移动到 /home/kairee.old 备份"
|
||||||
rm -rf /home/kairee
|
mv /home/kairee /home/kairee.old
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -L "/home/kairee" ] && [ "$(readlink /home/kairee)" != "/data/home/kairee" ]; then
|
if [ -L "/home/kairee" ] && [ "$(readlink /home/kairee)" != "/data/home/kairee" ]; then
|
||||||
@@ -343,8 +399,7 @@ task_11_generate_ssh_key() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 使用 kairee 用户身份生成密钥
|
# 使用 kairee 用户身份生成密钥
|
||||||
sudo -u kairee ssh-keygen -m PEM -t ed25519 -f "$SSH_PRIVATE_KEY" -N ""
|
if sudo -u kairee ssh-keygen -t ed25519 -f "$SSH_PRIVATE_KEY" -N ""; then
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
log_success "生成 SSH 密钥对完成(kairee 用户)"
|
log_success "生成 SSH 密钥对完成(kairee 用户)"
|
||||||
log_info "私钥: $SSH_PRIVATE_KEY"
|
log_info "私钥: $SSH_PRIVATE_KEY"
|
||||||
log_info "公钥: $SSH_PUBLIC_KEY"
|
log_info "公钥: $SSH_PUBLIC_KEY"
|
||||||
@@ -358,7 +413,6 @@ task_11_generate_ssh_key() {
|
|||||||
task_12_copy_ssh_key() {
|
task_12_copy_ssh_key() {
|
||||||
REMOTE_HOST="qc5.ofcdn.cn"
|
REMOTE_HOST="qc5.ofcdn.cn"
|
||||||
REMOTE_PORT="46571"
|
REMOTE_PORT="46571"
|
||||||
REMOTE_USER="kairee"
|
|
||||||
REMOTE_SSH_COPY_ID_USER="kairee"
|
REMOTE_SSH_COPY_ID_USER="kairee"
|
||||||
|
|
||||||
# 使用 kairee 用户的家目录
|
# 使用 kairee 用户的家目录
|
||||||
@@ -377,6 +431,9 @@ task_12_copy_ssh_key() {
|
|||||||
# 密码重试机制
|
# 密码重试机制
|
||||||
MAX_RETRIES=3
|
MAX_RETRIES=3
|
||||||
RETRY_COUNT=0
|
RETRY_COUNT=0
|
||||||
|
TEMP_SCRIPT="${KAIREE_HOME}/.ssh/temp_ssh_copy_$$.sh"
|
||||||
|
# 无论成功失败或脚本被中断,都清理含密码的临时脚本并清除密码变量
|
||||||
|
trap 'rm -f "$TEMP_SCRIPT" 2>/dev/null; unset REMOTE_SSH_PASSWORD SSHPASS_B64' EXIT
|
||||||
|
|
||||||
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
||||||
echo
|
echo
|
||||||
@@ -389,13 +446,13 @@ task_12_copy_ssh_key() {
|
|||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
echo "请输入 $REMOTE_SSH_COPY_ID_USER 在 $REMOTE_HOST 上的 SSH 密码:"
|
echo "请输入 $REMOTE_SSH_COPY_ID_USER 在 $REMOTE_HOST 上的 SSH 密码:"
|
||||||
read -s -p "SSH 密码: " REMOTE_SSH_PASSWORD
|
read -rs -p "SSH 密码: " REMOTE_SSH_PASSWORD
|
||||||
echo
|
echo
|
||||||
|
|
||||||
if [ -z "$REMOTE_SSH_PASSWORD" ]; then
|
if [ -z "$REMOTE_SSH_PASSWORD" ]; then
|
||||||
log_warning "未输入 SSH 密码"
|
log_warning "未输入 SSH 密码"
|
||||||
if [ $RETRY_COUNT -lt $((MAX_RETRIES - 1)) ]; then
|
if [ $RETRY_COUNT -lt $((MAX_RETRIES - 1)) ]; then
|
||||||
read -p "是否继续重试?(y/n): " CONTINUE
|
read -rp "是否继续重试?(y/n): " CONTINUE
|
||||||
if [ "$CONTINUE" != "y" ] && [ "$CONTINUE" != "Y" ]; then
|
if [ "$CONTINUE" != "y" ] && [ "$CONTINUE" != "Y" ]; then
|
||||||
log_warning "用户取消,跳过 ssh-copy-id"
|
log_warning "用户取消,跳过 ssh-copy-id"
|
||||||
return 0
|
return 0
|
||||||
@@ -409,15 +466,18 @@ task_12_copy_ssh_key() {
|
|||||||
log_info "正在尝试复制公钥到远程服务器(使用 kairee 用户的密钥)..."
|
log_info "正在尝试复制公钥到远程服务器(使用 kairee 用户的密钥)..."
|
||||||
|
|
||||||
# 在 kairee 用户目录下创建临时脚本文件(避免 /tmp 权限问题)
|
# 在 kairee 用户目录下创建临时脚本文件(避免 /tmp 权限问题)
|
||||||
TEMP_SCRIPT="${KAIREE_HOME}/.ssh/temp_ssh_copy_$$.sh"
|
|
||||||
mkdir -p "${KAIREE_HOME}/.ssh"
|
mkdir -p "${KAIREE_HOME}/.ssh"
|
||||||
chown kairee:kairee "${KAIREE_HOME}/.ssh"
|
chown kairee:kairee "${KAIREE_HOME}/.ssh"
|
||||||
|
|
||||||
|
# 密码经 base64 传入避免特殊字符转义问题,用 sshpass -e 避免密码出现在进程列表
|
||||||
|
SSHPASS_B64=$(printf '%s' "$REMOTE_SSH_PASSWORD" | base64 -w0)
|
||||||
|
|
||||||
# 先测试连接并接受 host key(这会自动将 host key 添加到 kairee 用户的 known_hosts)
|
# 先测试连接并接受 host key(这会自动将 host key 添加到 kairee 用户的 known_hosts)
|
||||||
# 使用 sudo -u kairee tee 来创建文件,确保文件所有者是 kairee
|
# 使用 sudo -u kairee tee 来创建文件,确保文件所有者是 kairee
|
||||||
sudo -u kairee tee "$TEMP_SCRIPT" > /dev/null << EOF
|
sudo -u kairee tee "$TEMP_SCRIPT" > /dev/null << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
sshpass -p "$REMOTE_SSH_PASSWORD" ssh -p "$REMOTE_PORT" \
|
export SSHPASS=\$(printf '%s' "$SSHPASS_B64" | base64 -d)
|
||||||
|
sshpass -e ssh -p "$REMOTE_PORT" \
|
||||||
-o StrictHostKeyChecking=accept-new \
|
-o StrictHostKeyChecking=accept-new \
|
||||||
-o PasswordAuthentication=yes \
|
-o PasswordAuthentication=yes \
|
||||||
-o UserKnownHostsFile="$SSH_KNOWN_HOSTS" \
|
-o UserKnownHostsFile="$SSH_KNOWN_HOSTS" \
|
||||||
@@ -433,7 +493,8 @@ EOF
|
|||||||
# 连接成功,现在复制公钥(此时 host key 已确认,使用 StrictHostKeyChecking=no)
|
# 连接成功,现在复制公钥(此时 host key 已确认,使用 StrictHostKeyChecking=no)
|
||||||
sudo -u kairee tee "$TEMP_SCRIPT" > /dev/null << EOF
|
sudo -u kairee tee "$TEMP_SCRIPT" > /dev/null << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
sshpass -p "$REMOTE_SSH_PASSWORD" ssh-copy-id -p "$REMOTE_PORT" \
|
export SSHPASS=\$(printf '%s' "$SSHPASS_B64" | base64 -d)
|
||||||
|
sshpass -e ssh-copy-id -p "$REMOTE_PORT" \
|
||||||
-o StrictHostKeyChecking=no \
|
-o StrictHostKeyChecking=no \
|
||||||
-o UserKnownHostsFile="$SSH_KNOWN_HOSTS" \
|
-o UserKnownHostsFile="$SSH_KNOWN_HOSTS" \
|
||||||
"$REMOTE_SSH_COPY_ID_USER@$REMOTE_HOST"
|
"$REMOTE_SSH_COPY_ID_USER@$REMOTE_HOST"
|
||||||
@@ -510,8 +571,7 @@ task_13_add_cron() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 添加到 kairee 用户的 crontab
|
# 添加到 kairee 用户的 crontab
|
||||||
(sudo -u kairee crontab -l 2>/dev/null; echo "$CRON_CMD") | sudo -u kairee crontab -
|
if (sudo -u kairee crontab -l 2>/dev/null; echo "$CRON_CMD") | sudo -u kairee crontab -; then
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
log_success "定时任务已添加到 kairee 用户的 crontab"
|
log_success "定时任务已添加到 kairee 用户的 crontab"
|
||||||
log_info "执行时间: 每天 $RANDOM_HOUR:$RANDOM_MINUTE"
|
log_info "执行时间: 每天 $RANDOM_HOUR:$RANDOM_MINUTE"
|
||||||
log_info "命令: /data/scripts/certs.sh >> /data/certs/sync.log 2>&1"
|
log_info "命令: /data/scripts/certs.sh >> /data/certs/sync.log 2>&1"
|
||||||
@@ -527,57 +587,73 @@ echo
|
|||||||
log_info "开始执行初始化任务..."
|
log_info "开始执行初始化任务..."
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 保存原始参数(用于任务2)
|
# 记录失败任务,结束时汇总
|
||||||
ORIGINAL_ARGS="$@"
|
FAILED_TASKS=()
|
||||||
|
|
||||||
# 任务1: 创建用户 kairee
|
# 任务1: 创建用户 kairee
|
||||||
execute_task "task_1" "创建用户 kairee" task_1_create_user || log_warning "任务1失败,继续执行后续任务"
|
execute_task "task_1" "创建用户 kairee" task_1_create_user || { log_warning "任务1失败,继续执行后续任务"; FAILED_TASKS+=("task_1"); }
|
||||||
|
|
||||||
# 任务2: 下载并解压数据包(需要特殊处理参数)
|
# 任务2: 下载并解压数据包(需要特殊处理参数)
|
||||||
if task_completed "task_2"; then
|
if task_completed "task_2"; then
|
||||||
log_info "任务 task_2: 下载并解压数据包 - 已完成,跳过"
|
log_info "任务 task_2: 下载并解压数据包 - 已完成,跳过"
|
||||||
else
|
else
|
||||||
log_info "执行任务 task_2: 下载并解压数据包..."
|
log_info "执行任务 task_2: 下载并解压数据包..."
|
||||||
if task_2_download_data $ORIGINAL_ARGS; then
|
task_2_download_data "$@"
|
||||||
|
case $? in
|
||||||
|
0)
|
||||||
mark_task_completed "task_2"
|
mark_task_completed "task_2"
|
||||||
log_success "任务 task_2 完成"
|
log_success "任务 task_2 完成"
|
||||||
else
|
;;
|
||||||
|
2)
|
||||||
|
log_warning "未提供数据包 URL,跳过下载(未标记完成,可在重跑时传入 URL 参数)"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
log_warning "任务2失败,继续执行后续任务"
|
log_warning "任务2失败,继续执行后续任务"
|
||||||
fi
|
FAILED_TASKS+=("task_2")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 任务3: 安装软件包
|
# 任务3: 安装软件包
|
||||||
execute_task "task_3" "安装基础软件包" task_3_install_packages || log_warning "任务3失败,继续执行后续任务"
|
execute_task "task_3" "安装基础软件包" task_3_install_packages || { log_warning "任务3失败,继续执行后续任务"; FAILED_TASKS+=("task_3"); }
|
||||||
|
|
||||||
# 任务4: 安装 Docker
|
# 任务4: 安装 Docker
|
||||||
execute_task "task_4" "安装 Docker CE" task_4_install_docker || log_warning "任务4失败,继续执行后续任务"
|
execute_task "task_4" "安装 Docker CE" task_4_install_docker || { log_warning "任务4失败,继续执行后续任务"; FAILED_TASKS+=("task_4"); }
|
||||||
|
|
||||||
# 任务5: 配置 apt 源
|
# 任务5: 配置 apt 源
|
||||||
execute_task "task_5" "配置 apt 源" task_5_configure_apt || log_warning "任务5失败,继续执行后续任务"
|
execute_task "task_5" "配置 apt 源" task_5_configure_apt || { log_warning "任务5失败,继续执行后续任务"; FAILED_TASKS+=("task_5"); }
|
||||||
|
|
||||||
# 任务6: 配置 Docker daemon
|
# 任务6: 配置 Docker daemon
|
||||||
execute_task "task_6" "配置 Docker daemon" task_6_configure_docker || log_warning "任务6失败,继续执行后续任务"
|
execute_task "task_6" "配置 Docker daemon" task_6_configure_docker || { log_warning "任务6失败,继续执行后续任务"; FAILED_TASKS+=("task_6"); }
|
||||||
|
|
||||||
# 任务7: 配置 SSH
|
# 任务7: 配置 SSH
|
||||||
execute_task "task_7" "配置 SSH" task_7_configure_ssh || log_warning "任务7失败,继续执行后续任务"
|
execute_task "task_7" "配置 SSH" task_7_configure_ssh || { log_warning "任务7失败,继续执行后续任务"; FAILED_TASKS+=("task_7"); }
|
||||||
|
|
||||||
# 任务8: 配置 sudoers
|
# 任务8: 配置 sudoers
|
||||||
execute_task "task_8" "配置 sudoers" task_8_configure_sudoers || log_warning "任务8失败,继续执行后续任务"
|
execute_task "task_8" "配置 sudoers" task_8_configure_sudoers || { log_warning "任务8失败,继续执行后续任务"; FAILED_TASKS+=("task_8"); }
|
||||||
|
|
||||||
# 任务9: 添加 kairee 到 docker 组
|
# 任务9: 添加 kairee 到 docker 组
|
||||||
execute_task "task_9" "添加 kairee 到 docker 组" task_9_add_docker_group || log_warning "任务9失败,继续执行后续任务"
|
execute_task "task_9" "添加 kairee 到 docker 组" task_9_add_docker_group || { log_warning "任务9失败,继续执行后续任务"; FAILED_TASKS+=("task_9"); }
|
||||||
|
|
||||||
# 任务10: 创建家目录软链接
|
# 任务10: 创建家目录软链接
|
||||||
execute_task "task_10" "创建家目录软链接" task_10_create_home_link || log_warning "任务10失败,继续执行后续任务"
|
execute_task "task_10" "创建家目录软链接" task_10_create_home_link || { log_warning "任务10失败,继续执行后续任务"; FAILED_TASKS+=("task_10"); }
|
||||||
|
|
||||||
# 任务11: 生成 SSH 密钥对
|
# 任务11: 生成 SSH 密钥对
|
||||||
execute_task "task_11" "生成 SSH 密钥对" task_11_generate_ssh_key || log_warning "任务11失败,继续执行后续任务"
|
execute_task "task_11" "生成 SSH 密钥对" task_11_generate_ssh_key || { log_warning "任务11失败,继续执行后续任务"; FAILED_TASKS+=("task_11"); }
|
||||||
|
|
||||||
# 任务12: 复制公钥到远程服务器
|
# 任务12: 复制公钥到远程服务器
|
||||||
execute_task "task_12" "复制公钥到远程服务器" task_12_copy_ssh_key || log_warning "任务12失败,继续执行后续任务"
|
execute_task "task_12" "复制公钥到远程服务器" task_12_copy_ssh_key || { log_warning "任务12失败,继续执行后续任务"; FAILED_TASKS+=("task_12"); }
|
||||||
|
|
||||||
# 任务13: 添加定时任务
|
# 任务13: 添加定时任务
|
||||||
execute_task "task_13" "添加定时任务" task_13_add_cron || log_warning "任务13失败,继续执行后续任务"
|
execute_task "task_13" "添加定时任务" task_13_add_cron || { log_warning "任务13失败,继续执行后续任务"; FAILED_TASKS+=("task_13"); }
|
||||||
|
|
||||||
|
# 失败任务汇总
|
||||||
|
if [ ${#FAILED_TASKS[@]} -gt 0 ]; then
|
||||||
|
log_warning "以下任务执行失败: ${FAILED_TASKS[*]}"
|
||||||
|
log_warning "可通过删除 $STATUS_FILE 中对应任务 ID 后重跑,或检查日志 $LOG_FILE"
|
||||||
|
else
|
||||||
|
log_success "所有任务均执行成功"
|
||||||
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
@@ -598,6 +674,7 @@ else
|
|||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
echo "状态文件: $STATUS_FILE"
|
echo "状态文件: $STATUS_FILE"
|
||||||
|
echo "日志文件: $LOG_FILE"
|
||||||
echo "如需重新执行某个任务,可以编辑状态文件删除对应的任务ID"
|
echo "如需重新执行某个任务,可以编辑状态文件删除对应的任务ID"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user