From 6f764b7c80722cb3f316d2bd01dddf33176ec5ac Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Sun, 2 Nov 2025 17:43:55 +0800 Subject: [PATCH] Update WebSSH --- WebSSH | 145 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 97 insertions(+), 48 deletions(-) diff --git a/WebSSH b/WebSSH index 93471ca..babe5a0 100644 --- a/WebSSH +++ b/WebSSH @@ -1,61 +1,110 @@ #!/bin/bash -echo "🚀 NexTerm 一键安装(Docker Compose + 随机端口)" +echo "🔍 开始安全清理 NexTerm..." -# 生成加密密钥 -ENCRYPTION_KEY=$(openssl rand -hex 32) -echo "🔑 生成加密密钥: $ENCRYPTION_KEY" +# 检查容器是否存在及其状态 +echo "1. 检查容器状态..." +docker ps -a | grep nexterm -# 创建配置目录 -mkdir -p /boot/docker-apps +# 获取容器的详细信息 +echo "2. 获取容器详细信息..." +CONTAINER_INFO=$(docker inspect nexterm 2>/dev/null || echo "容器不存在") -# 创建 Docker Compose 配置文件 -cat > /boot/docker-apps/nexterm.yml << EOF -version: '3.8' +if [ "$CONTAINER_INFO" != "容器不存在" ]; then + echo "📦 容器信息:" + echo " 状态: $(echo "$CONTAINER_INFO" | grep '"Status"' | head -1)" + echo " 镜像: $(echo "$CONTAINER_INFO" | grep '"Image"' | head -1)" + echo " 创建时间: $(echo "$CONTAINER_INFO" | grep '"Created"' | head -1)" + + # 获取容器使用的卷 + echo "3. 检查容器挂载的卷..." + MOUNTS=$(echo "$CONTAINER_INFO" | grep '"Source"' | awk -F'"' '{print $4}') + if [ -n "$MOUNTS" ]; then + echo "📁 容器挂载的目录:" + echo "$MOUNTS" + fi +fi -services: - nexterm: - image: germannewsmaker/nexterm:1.0.5-OPEN-PREVIEW - container_name: nexterm - ports: - - "3000" # 随机端口 - environment: - - ENCRYPTION_KEY=$ENCRYPTION_KEY - - TZ=Asia/Shanghai - volumes: - - nexterm_data:/app/data - restart: unless-stopped +# 检查数据卷 +echo "4. 检查数据卷..." +VOLUME_INFO=$(docker volume inspect nexterm 2>/dev/null || echo "数据卷不存在") +if [ "$VOLUME_INFO" != "数据卷不存在" ]; then + echo "💾 数据卷信息:" + VOLUME_PATH=$(echo "$VOLUME_INFO" | grep '"Mountpoint"' | awk -F'"' '{print $4}') + echo " 挂载点: $VOLUME_PATH" + echo " 数据大小: $(du -sh $VOLUME_PATH 2>/dev/null || echo "无法获取大小")" +fi -volumes: - nexterm_data: -EOF +# 确认删除 +read -p "⚠️ 确认要删除 NexTerm 容器和数据卷吗?(y/N): " confirm +if [[ $confirm != [yY] ]]; then + echo "❌ 操作已取消" + exit 0 +fi -echo "📁 配置文件已创建: /boot/docker-apps/nexterm.yml" +# 开始清理 +echo "5. 开始清理..." -# 停止并删除旧版本(如果存在) -echo "🔄 清理旧版本..." -docker compose -f /boot/docker-apps/nexterm.yml down 2>/dev/null || true +# 停止容器(如果运行中) +echo " 🛑 停止容器..." +docker stop nexterm 2>/dev/null && echo " ✅ 容器已停止" || echo " ℹ️ 容器未运行" -# 启动服务 -echo "🐳 启动 NexTerm..." -docker compose -f /boot/docker-apps/nexterm.yml up -d +# 删除容器 +echo " 🗑️ 删除容器..." +docker rm nexterm 2>/dev/null && echo " ✅ 容器已删除" || echo " ℹ️ 容器不存在" -# 等待启动 -echo "⏳ 等待服务启动..." -sleep 10 +# 删除数据卷 +echo " 🗑️ 删除数据卷..." +docker volume rm nexterm 2>/dev/null && echo " ✅ 数据卷已删除" || echo " ℹ️ 数据卷不存在" -# 获取实际端口 -ACTUAL_PORT=$(docker compose -f /boot/docker-apps/nexterm.yml port nexterm 3000 | cut -d: -f2) -SERVER_IP=$(curl -s ipv4.icanhazip.com 2>/dev/null || hostname -I | awk '{print $1}') +# 检查是否还有残留 +echo "6. 检查清理结果..." +CLEAN_RESULT=$(docker ps -a | grep -c nexterm) +VOLUME_RESULT=$(docker volume ls | grep -c nexterm) -echo "" -echo "✅ 安装完成!" -echo "🌐 访问地址: http://$SERVER_IP:$ACTUAL_PORT" -echo "🔑 加密密钥: $ENCRYPTION_KEY" -echo "" -echo "📋 管理命令:" -echo " 启动: docker compose -f /boot/docker-apps/nexterm.yml start" -echo " 停止: docker compose -f /boot/docker-apps/nexterm.yml stop" -echo " 重启: docker compose -f /boot/docker-apps/nexterm.yml restart" -echo " 卸载: docker compose -f /boot/docker-apps/nexterm.yml down" -echo " 日志: docker compose -f /boot/docker-apps/nexterm.yml logs" +if [ $CLEAN_RESULT -eq 0 ] && [ $VOLUME_RESULT -eq 0 ]; then + echo "✅ 清理完成!NexTerm 已完全删除" +else + echo "⚠️ 发现残留项目:" + [ $CLEAN_RESULT -ne 0 ] && echo " - 容器残留" && docker ps -a | grep nexterm + [ $VOLUME_RESULT -ne 0 ] && echo " - 数据卷残留" && docker volume ls | grep nexterm +fi + +# 生成新密钥并使用随机端口重新安装 +echo "7. 重新安装(使用随机端口)..." +NEW_KEY=$(openssl rand -hex 32) +echo "🔑 新加密密钥: $NEW_KEY" +echo "💡 请妥善保存此密钥!" + +docker run -d \ + -e ENCRYPTION_KEY=$NEW_KEY \ + -p 3000 \ # 只指定容器端口,让Docker自动分配主机端口 + --name nexterm \ + --restart unless-stopped \ + -v nexterm:/app/data \ + germannewsmaker/nexterm:1.0.5-OPEN-PREVIEW + +echo "8. 等待容器启动..." +sleep 8 + +# 获取实际映射的端口 +echo "9. 获取端口映射信息..." +ACTUAL_PORT=$(docker port nexterm | grep '3000/tcp' | awk -F: '{print $2}') + +if docker ps | grep -q nexterm; then + echo "✅ NexTerm 重新安装成功!" + echo "🌐 访问地址: http://服务器IP:${ACTUAL_PORT:-未知端口}" + echo "🔑 加密密钥: $NEW_KEY" + + # 显示完整的端口信息 + echo "" + echo "📊 端口映射详情:" + docker port nexterm + + # 获取服务器IP + SERVER_IP=$(curl -s ipv4.icanhazip.com 2>/dev/null || hostname -I | awk '{print $1}' || echo "localhost") + echo "" + echo "🎯 完整访问地址: http://${SERVER_IP}:${ACTUAL_PORT}" +else + echo "❌ 安装失败,请检查日志: docker logs nexterm" +fi