--- title: VNC 单脚本管理与批量下发 icon: mdi:remote-desktop date: 2026-03-09 category: - Linux tag: - VNC - 运维 - Bash - SSH --- 本文记录一次 VNC 运维落地方案:在单机用 `vnc_ctl.sh` 统一管理服务生命周期,再通过 `deploy_to_desktop.sh` 按 IP 列表批量下发到多台 Linux 机器。 # VNC 单脚本管理与批量下发 ## 1. 目标场景 示例目标机器: - `10.6.223.223` - `10.6.220.165` - `10.6.221.8` - `10.6.223.233` 统一目标: 1. 在远程桌面生成 `vnc_ctl.sh` 2. 后台运行 `x0vncserver` 3. 提供开机自启能力 4. 支持状态检查与一键停止 5. 支持批量下发,减少重复操作 ## 2. 管理脚本设计 主脚本:`vnc_ctl.sh` 支持命令: - `start`:启动 VNC - `stop`:停止 VNC - `check`:检查进程、端口、密码文件与日志 - `restart`:重启服务 - `install-autostart`:安装 `@reboot` 自启 - `remove-autostart`:移除自启 核心思路: - 通过 `pgrep` 精确匹配 `x0vncserver` 参数定位进程 - 使用 `nohup` 后台运行并记录日志 - 通过 `crontab` 注入 `@reboot` 行实现开机拉起 示例(启动命令段): ```bash nohup x0vncserver \ -display ":0" \ -passwordfile "$HOME/.vnc/passwd" \ -rfbport "5900" \ -nevershared \ -idletimeout 0 \ >>"$HOME/.vnc/x0vncserver-5900.log" 2>&1 & ``` ## 3. 批量下发脚本 下发脚本:`deploy_to_desktop.sh` 用途:把本地脚本按 IP 列表分发到远程桌面目录,并自动加执行权限。 示例命令: ```bash ./deploy_to_desktop.sh -f ./vnc_ctl.sh -i 10.6.223.233,10.6.220.165 -u sunri ``` 脚本默认行为: - 目标目录默认为 `/home//Desktop` - 使用 SSH/SCP 分发 - 分发后自动执行 `chmod +x` ## 4. 推荐使用流程 ```bash chmod +x ./vnc_ctl.sh ./deploy_to_desktop.sh ./deploy_to_desktop.sh -f ./vnc_ctl.sh -i 10.6.223.233,10.6.220.165 -u sunri ``` 远程执行示例: ```bash ssh sunri@10.6.220.165 "/home/sunri/Desktop/vnc_ctl.sh install-autostart && /home/sunri/Desktop/vnc_ctl.sh start && /home/sunri/Desktop/vnc_ctl.sh check" ``` ## 5. 测试结论 - `10.6.220.165`:下发成功,脚本存在且可执行 - `10.6.223.233`:下发失败,原因为 SSH 认证失败(`Permission denied`) ## 6. 常见问题排查 - 缺少密码文件:在目标机执行 `vncpasswd` - 端口未监听:检查 `~/.vnc/x0vncserver-5900.log` - 开机自启未生效:检查 `crontab -l` 中 `@reboot ... vnc_ctl.sh start ...` - 无法下发:先手动验证 `ssh @` ## 7. 小结 该方案把 VNC 运维拆成两个可复用脚本: - 单机统一管理生命周期 - 多机统一批量下发 适合内网多台 Linux 机器的日常维护与快速复制部署。