docs(blog): 按博客风格整理三篇技术文档

This commit is contained in:
liumangmang
2026-03-09 14:09:19 +08:00
parent d70de00176
commit e765565a70
3 changed files with 335 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
---
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 机器。
<!-- more -->
# 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/<user>/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 <user>@<ip>`
## 7. 小结
该方案把 VNC 运维拆成两个可复用脚本:
- 单机统一管理生命周期
- 多机统一批量下发
适合内网多台 Linux 机器的日常维护与快速复制部署。