From 8e51fc50a090dd8f0dd54c8e68ac80016359f14b Mon Sep 17 00:00:00 2001 From: cnbugs <717192502@qq.com> Date: Fri, 26 Jun 2026 17:30:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20create=5Fand=5Fstart=5Fvnc?= =?UTF-8?q?.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create_and_start_vnc.sh | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 create_and_start_vnc.sh diff --git a/create_and_start_vnc.sh b/create_and_start_vnc.sh new file mode 100644 index 0000000..1213bdd --- /dev/null +++ b/create_and_start_vnc.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# 1. 检查是否以 root 权限运行 +if [ "$EUID" -ne 0 ]; then + echo "❌ 错误: 请使用 root 权限 (sudo) 运行此脚本。" + exit 1 +fi + +# 2. 定义用户列表文件 +USER_FILE="vnc_users.txt" + +# 检查文件是否存在 +if [ ! -f "$USER_FILE" ]; then + echo "❌ 错误: 找不到用户列表文件 '$USER_FILE'。" + echo "请创建一个包含 '用户名:密码' 的文件 (例如: user1:123456)。" + exit 1 +fi + +# 3. 检查系统是否安装了 vncpasswd 和 vncserver 命令 +if ! command -v vncpasswd &> /dev/null || ! command -v vncserver &> /dev/null; then + echo "❌ 错误: 系统中未找到 VNC 相关命令。请先安装 VNC Server (如 tigervnc-server)。" + exit 1 +fi + +echo "🚀 开始批量创建账号并启动 VNC 服务..." +echo "========================================" + +# 初始化 VNC 显示编号,从 1 开始 (对应端口 5901) +DISPLAY_NUM=1 + +# 4. 逐行读取文件并处理 +while IFS=':' read -r username password; do + # 忽略空行和以 # 开头的注释行 + [[ -z "$username" || "$username" == \#* ]] && continue + + # 清理可能存在的首尾空格(兼容 Windows 格式换行符) + username=$(echo "$username" | tr -d '\r' | xargs) + password=$(echo "$password" | tr -d '\r' | xargs) + + echo "⏳ 正在处理用户: $username" + + # 步骤 A: 创建系统用户 (如果不存在) + if id "$username" &>/dev/null; then + echo " -> ⚠️ 系统用户 $username 已存在,跳过创建。" + else + useradd -m "$username" -s /bin/bash + echo "$username:$password" | chpasswd + echo " -> ✅ 系统用户 $username 创建成功。" + fi + + # 步骤 B: 配置 VNC 密码及目录 + VNC_DIR="/home/$username/.vnc" + mkdir -p "$VNC_DIR" + + # 设置 VNC 密码 + echo "$password" | vncpasswd -f > "$VNC_DIR/passwd" + chmod 600 "$VNC_DIR/passwd" + chown -R "$username:$username" "$VNC_DIR" + echo " -> ✅ VNC 密码配置完成。" + + # 步骤 C: 启动 VNC 服务 + # 计算当前用户的端口号用于展示 + CURRENT_PORT=$((5900 + DISPLAY_NUM)) + echo " -> ⚙️ 准备启动 VNC 桌面 :$DISPLAY_NUM (端口: $CURRENT_PORT)" + + # 切换到对应用户并启动 vncserver + # 如果该显示编号已被占用,vncserver 通常会报错,这里暂不处理复杂占用情况 + su - "$username" -c "vncserver :$DISPLAY_NUM" + + echo " -> 🎯 用户 $username 部署完毕!请使用 <服务器IP>:$CURRENT_PORT 连接。" + echo "----------------------------------------" + + # 显示编号递增,为下一个用户准备 + ((DISPLAY_NUM++)) + +done < "$USER_FILE" + +echo "🎉 所有账号创建与 VNC 服务启动已完成!" \ No newline at end of file