244 lines
6.8 KiB
Bash
244 lines
6.8 KiB
Bash
#!/bin/bash
|
|
|
|
# ==================== 配置变量 ====================
|
|
# 需要创建的用户数量
|
|
USER_COUNT=${1:-10}
|
|
# 公共的工作目录
|
|
PUBLIC_DIR="${2:-/shared}"
|
|
# git仓库地址
|
|
GIT_NO_VNC="${3:-https://github.com/novnc/noVNC.git}"
|
|
GIT_WEBSOCKIFY="${4:-https://github.com/novnc/websockify.git}"
|
|
GIT_PY_SPIDER="${5:-https://git.nps.crabapples.cn/crabapples/learn-spider.git}"
|
|
|
|
echo "USER_COUNT: $USER_COUNT"
|
|
echo "PUBLIC_DIR: $PUBLIC_DIR"
|
|
echo "GIT_NO_VNC: $GIT_NO_VNC"
|
|
echo "GIT_WEBSOCKIFY: $GIT_WEBSOCKIFY"
|
|
echo "GIT_PY_SPIDER: $GIT_PY_SPIDER"
|
|
echo ""
|
|
sleep 3
|
|
# ==================== 函数定义 ====================
|
|
|
|
# 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
|
|
if [ -d "learn-spider" ]; then
|
|
cd learn-spider
|
|
sudo git pull
|
|
else
|
|
sudo git clone $GIT_PY_SPIDER
|
|
cd learn-spider
|
|
fi
|
|
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 |