202 lines
5.2 KiB
Bash
202 lines
5.2 KiB
Bash
#!/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"
|