From 8b87a561e4bd1a31eb0a40d6b87e883f5f4264ff Mon Sep 17 00:00:00 2001 From: mshe <666666666@666666666.666666666> Date: Wed, 27 May 2026 16:53:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(vnc):=20=E6=B7=BB=E5=8A=A0VNC=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC=E5=B9=B6?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增install.sh脚本,包含批量创建用户、设置VNC密码、配置noVNC服务等功能 - 移除旧的run.sh和setup.sh脚本,将功能整合到新的安装脚本中 - 实现自动化VNC环境部署,包括XFCE桌面、noVNC代理、SSL证书生成 - 配置多用户VNC访问支持,预设10个用户账户及对应端口映射 - 创建公共工作目录并设置适当的文件权限和软链接 - 添加防火墙配置和系统服务自动启动功能 --- install.sh | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++++ run.sh | 106 +--------------------------- setup.sh | 1 - 3 files changed, 202 insertions(+), 106 deletions(-) create mode 100644 install.sh mode change 100644 => 100755 run.sh delete mode 100755 setup.sh diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..2da1da3 --- /dev/null +++ b/install.sh @@ -0,0 +1,201 @@ +#!/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" diff --git a/run.sh b/run.sh old mode 100644 new mode 100755 index 87d6705..d51f952 --- a/run.sh +++ b/run.sh @@ -1,105 +1 @@ -#!/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密码设置完成!" -} - -# 创建公共目录 -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 -} - -install_vnc_server(){ - cd $PUBLIC_DIR - sudo git clone https://github.com/novnc/noVNC.git - sudo git clone https://github.com/novnc/websockify.git -} - -create_ssl_cert(){ - cd $PUBLIC_DIR/noVNC - sudo openssl req -new -x509 -days 365 -nodes \ - -out self.pem \ - -keyout self.pem \ - -subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=localhost" -} - -# batch_create_user -# batch_set_vncpdw -# cerate_public_dir -# create_shortcut_for_users -# install_vnc_server -create_ssl_cert -# batch_delete_user \ No newline at end of file +.venv/bin/python3.12 spider/china_net.py \ No newline at end of file diff --git a/setup.sh b/setup.sh deleted file mode 100755 index d51f952..0000000 --- a/setup.sh +++ /dev/null @@ -1 +0,0 @@ -.venv/bin/python3.12 spider/china_net.py \ No newline at end of file