#!/bin/bash # ==================== 配置变量 ==================== # 需要创建的用户数量 USER_COUNT=10 # 公共的工作目录 PUBLIC_DIR="/shared" # git仓库原地址 GIT_NO_VNC_BAK="https://github.com/novnc/noVNC.git" GIT_WEBSOCKIFY_BAK="https://github.com/novnc/websockify.git" # git仓库加速地址 GIT_NO_VNC="https://git.nps.crabapples.cn/crabapples/noVNC.git" GIT_WEBSOCKIFY="https://git.nps.crabapples.cn/crabapples/websockify.git" GIT_PY_SPIDER="https://git.nps.crabapples.cn/crabapples/learn-spider.git" # ==================== 函数定义 ==================== # 1. 预安装软件 pre_install(){ echo "当前进度:01.预安装软件" sudo apt update sudo apt install -y xfce4 xfce4-goodies sudo apt install -y tigervnc-standalone-server tigervnc-common sudo apt install -y git python3 openssl echo "✅ [完成] 预安装软件" echo "" } # 2. 开放防火墙 open_firewall(){ echo "当前进度:02.开放防火墙" sudo ufw allow 6080/tcp echo "✅ [完成] 开放防火墙端口 6080" echo "" } # 3. 批量创建用户 batch_create_user(){ echo "当前进度:03.创建用户" 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 "✅ [完成] 共创建 $USER_COUNT 个用户" echo "" } # 4. 批量设置VNC密码 batch_set_vncpdw(){ echo "当前进度:04.设置VNC密码" for i in $(seq 1 $USER_COUNT); do username="user$i" sudo su - "$username" -c "mkdir -p ~/.vnc && echo '$username' | vncpasswd -f > ~/.vnc/passwd && chmod 600 ~/.vnc/passwd" echo " ✓ 正在设置 $username 的VNC密码" done echo "✅ [完成] 所有VNC密码设置完成" echo "" } # 5. 创建 VNC 启动配置 create_xstartup(){ echo "当前进度:05.创建VNC启动配置" 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 echo "✅ [完成] 所有用户的 VNC 启动配置创建完成" echo "" } # 6. 创建公共目录 cerate_public_dir(){ echo "当前进度:06.创建公共工作目录" 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)" echo "✅ [完成] 公共工作目录创建完成" echo "" } # 7. 在每个用户home目录创建软连接 create_shortcut_for_users(){ echo "当前进度:07.创建公共工作目录软连接" for i in $(seq 1 $USER_COUNT); do username="user$i" sudo su - "$username" -c "ln -sf $PUBLIC_DIR ~/workspace" echo " ✓ 正在创建 $username 的快捷方式" done echo "✅ [完成] 所有用户的软连接创建完成" echo "" } # 8. 准备novnc文件 install_vnc_server(){ echo "当前进度:08.下载NoVNC源码" cd $PUBLIC_DIR sudo git clone $GIT_NO_VNC sudo git clone $GIT_WEBSOCKIFY echo "✅ [完成] NoVNC 源码下载完成" echo "" } # 9. 生成ssl证书 create_ssl_cert(){ echo "当前进度:09.生成SSL证书,有效期:10年" 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证书生成完成" echo "" } # 10. 预安装爬虫 pre_install_spider(){ echo "当前进度:10.下载爬虫源码" cd $PUBLIC_DIR sudo git clone $GIT_PY_SPIDER cd learn-spider sudo chmod +x ./pre_install_spider.sh sudo chmod +x ./start_spider.sh sudo ./pre_install_spider.sh echo "✅ [完成] 爬虫环境安装完成" echo "" } # 11. 创建 token.conf 配置文件 create_token_conf(){ echo "当前进度:11.创建token.conf配置文件" sudo tee "$PUBLIC_DIR/websockify/token.conf" > /dev/null << EOF # noVNC Token Configuration $(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 内容预览:" sudo cat "$PUBLIC_DIR/websockify/token.conf" | head -5 echo "✅ [完成] token.conf 已创建" echo "" } # 12. 创建novnc服务文件 create_novnc_service(){ echo "当前进度:12.创建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 [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 sudo systemctl daemon-reload sudo systemctl stop novnc 2>/dev/null sudo systemctl enable novnc.service --now echo " 服务状态检查:" sudo systemctl status novnc --no-pager | head -5 echo "✅ [完成] noVNC 服务已创建并启动" echo " 查看日志: sudo journalctl -u novnc -f" echo " 访问地址: https://$(hostname -I | awk '{print $1}'):6080/vnc.html" echo "" } # 13. 显示部署总结 show_summary(){ echo "==================== 部署总结 ====================" echo "✅ 用户数量: $USER_COUNT" echo "✅ 公共目录: $PUBLIC_DIR" echo "✅ VNC 端口范围: 5901-$((5900 + $USER_COUNT))" echo "✅ noVNC 访问地址: https://$(hostname -I | awk '{print $1}'):6080/vnc.html" echo "✅ Token 配置: user1-user$USER_COUNT 使用对应密码" echo "" echo "==================== 部署完成 ====================" } # ==================== 主执行流程 ==================== main(){ echo "" echo "========== 开始部署 VNC 环境 ==========" echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" pre_install open_firewall batch_create_user batch_set_vncpdw create_xstartup cerate_public_dir create_shortcut_for_users install_vnc_server create_ssl_cert pre_install_spider create_token_conf create_novnc_service show_summary echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" } main