learn-spider/install.sh

202 lines
5.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"