Files
MyBlog/src/programming/linux/基础/05-vnc-单脚本管理与批量下发.md
2026-03-09 14:09:19 +08:00

2.7 KiB
Raw Blame History

title, icon, date, category, tag
title icon date category tag
VNC 单脚本管理与批量下发 mdi:remote-desktop 2026-03-09
Linux
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 行实现开机拉起

示例(启动命令段):

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 列表分发到远程桌面目录,并自动加执行权限。

示例命令:

./deploy_to_desktop.sh -f ./vnc_ctl.sh -i 10.6.223.233,10.6.220.165 -u sunri

脚本默认行为:

  • 目标目录默认为 /home/<user>/Desktop
  • 使用 SSH/SCP 分发
  • 分发后自动执行 chmod +x

4. 推荐使用流程

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

远程执行示例:

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 <user>@<ip>

7. 小结

该方案把 VNC 运维拆成两个可复用脚本:

  • 单机统一管理生命周期
  • 多机统一批量下发

适合内网多台 Linux 机器的日常维护与快速复制部署。