#!/bin/bash # 需要创建的用户数量 USER_COUNT=10 # 公共的工作目录 PUBLIC_DIR="/shared" # 预安装软件 pre_install(){ sudo apt install -y xfce4 xfce4-goodies sudo apt install -y tigervnc-standalone-server tigervnc-common sudo apt install -y git python3 openssl } # 开放防火墙 open_firewall(){ # 开放防火墙端口(根据实际安全策略调整) sudo ufw allow 6080/tcp # noVNC 主端口 # sudo ufw allow 6081/tcp # 用户2 # sudo ufw allow 6082/tcp # 用户3 # 注意:VNC原生端口(5901等)不需要开放,因为noVNC作为代理不直接暴露它们 } # 批量创建用户 batch_create_user(){ # 批量创建用户 user1 到 user100 for i in $(seq 1 $USER_COUNT); do username="user$i" # 创建用户 sudo useradd -m -s /bin/bash "$username" # 设置默认密码(与用户名相同,建议后续让用户自行修改) echo "$username:$username" | sudo chpasswd echo "用户 $username 创建完成,密码: $username" done echo "所有用户创建完成!" } # 批量删除用户 batch_delete_user(){ for i in $(seq 1 $USER_COUNT); do username="user$i" sudo userdel -r "$username" 2>/dev/null if [ $? -eq 0 ]; then echo "已删除用户: $username" else echo "用户 $username 不存在,跳过" fi done echo "批量删除完成!" } # 批量设置vnc密码 batch_set_vncpdw(){ for i in $(seq 1 $USER_COUNT); do username="user$i" # 使用 -c 参数直接执行命令,避免 heredoc 变量问题 sudo su - "$username" -c "mkdir -p ~/.vnc && echo '$username' | vncpasswd -f > ~/.vnc/passwd && chmod 600 ~/.vnc/passwd" echo "正在设置 $username 的VNC密码 " done echo "所有VNC密码设置完成!" } # 创建 VNC 启动配置 create_xstartup(){ for i in $(seq 1 ${USER_COUNT}); do username="user$i" sudo bash -c "cat > /home/$username/.vnc/xstartup << 'EOF' #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS startxfce4 & wait EOF" sudo chmod +x "/home/$username/.vnc/xstartup" echo "✅ 已创建 $username 的 xstartup" done } # 创建公共目录 cerate_public_dir(){ # 创建目录 sudo mkdir -p "$PUBLIC_DIR" # 设置权限:所有用户可读、可写、可执行 sudo chmod 777 "$PUBLIC_DIR" # 设置粘滞位(用户只能删除自己的文件) sudo chmod +t "$PUBLIC_DIR" # 设置所有者 sudo chown root:root "$PUBLIC_DIR" echo "公共文件夹已创建: $PUBLIC_DIR" echo "权限: $(ls -ld $PUBLIC_DIR)" } # 在每个用户home目录创建软连接 create_shortcut_for_users(){ for i in $(seq 1 $USER_COUNT); do username="user$i" # 在用户家目录创建软链接 sudo su - "$username" -c "ln -sf $PUBLIC_DIR ~/workspace" echo "正在创建快捷方式 $username" done } # 准备novnc文件 install_vnc_server(){ cd $PUBLIC_DIR sudo git clone https://github.com/novnc/noVNC.git sudo git clone https://github.com/novnc/websockify.git } # 生成ssl证书 create_ssl_cert(){ cd $PUBLIC_DIR/noVNC sudo openssl req -new -x509 -days 3650 -nodes \ -out self.pem \ -keyout self.pem \ -subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=localhost" echo "生成ssl证书完成" } # 预安装爬虫 pre_install_spider(){ cd $PUBLIC_DIR git clone https://git.nps.crabapples.cn/crabapples/learn-spider cd learn-spider sudo chmod +x ./pre_install.sh sudo ./pre_install.sh } # 创建 token.conf 配置文件 create_token_conf(){ sudo tee "$PUBLIC_DIR/websockify/token.conf" > /dev/null << EOF # noVNC Token Configuration # 格式: token名: VNC服务器地址:端口 $(for i in $(seq 1 $USER_COUNT); do echo "user$i: 127.0.0.1:$((5900 + i))"; done) EOF sudo chmod 644 "$PUBLIC_DIR/websockify/token.conf" echo "✅ token.conf 已创建" } # 创建novnc服务文件 create_novnc_service(){ WEB_ROOT="$PUBLIC_DIR/noVNC" WORKSPACE="$PUBLIC_DIR/websockify" TOKEN_FILE=$WORKSPACE/token.conf CERT_PATH=$WEB_ROOT/self.pem SERVICE_FILE="/etc/systemd/system/novnc.service" sudo tee "$SERVICE_FILE" > /dev/null << EOF [Unit] Description=noVNC WebSocket Proxy After=network.target After=vncserver.target [Service] Type=simple User=root WorkingDirectory=$WORKSPACE ExecStart=$WORKSPACE/run \ --web $WEB_ROOT \ --target-config $TOKEN_FILE \ --cert $CERT_PATH \ 6080 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF # echo "查看日志: sudo journalctl -u novnc -f" sudo systemctl daemon-reload sudo systemctl stop novnc sudo systemctl enable novnc.service --now echo "noVNC 服务已创建: $SERVICE_FILE" } # 启动vnc服务 start_vnc_server(){ for i in $(seq $USER_COUNT); do username="user$i" sudo su - "$username" -c "vncserver :$i -geometry 1280x800 -depth 24 -localhost no" echo "已启动 $username VNC,端口: $((5900 + $i))" done } start_spider(){ cd learn-spider } # batch_create_user # batch_set_vncpdw # cerate_public_dir # create_shortcut_for_users # install_vnc_server # create_ssl_cert # pre_install_spider create_xstartup create_token_conf create_novnc_service # start_vnc_server # batch_delete_user sudo su - "user1" -c "vncserver :1 -geometry 1280x800 -depth 24 -localhost no"