添加 create_and_start_vnc.sh
This commit is contained in:
@@ -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 服务启动已完成!"
|
||||
Reference in New Issue
Block a user