10 分钟接上你的 Proxmox 虚拟桌面:PVE-VDIClient 部署指南
10 分钟接上你的 Proxmox 虚拟桌面PVE-VDIClient 部署指南【免费下载链接】PVE-VDIClientProxmox based VDI client项目地址: https://gitcode.com/gh_mirrors/pv/PVE-VDIClient周五 17:40安全组要求 5 分钟内收回 3 台测试机的访问入口。PVE-VDIClient 是一个基于 Proxmox 的 VDI 客户端直接对接 PVE API用户通过 SPICE类似 RDP 的远程桌面协议连接虚机只看得见自己有权限的那几台。和同类方案差在哪传统 VDI 的开销大头在中间件——Broker、许可服务器、一套独立账号体系。这个项目把中间件砍掉直连 Proxmox VE权限复用 PVE 的 RBAC用户 × 资源 × 权限点的授权模型所谓用户清单就是谁看得见哪台虚机。传统 VDI 要先搭 Broker 和桌面池这里只要一份 INI 配置指向 PVE API 地址。传统 VDI 要另建一套用户账号这里权限即账号看不到虚机就开不了。传统 VDI 客户端是 Agent 加安装包这里是一个 Python 脚本或你用 PyInstaller 打成的单文件 exe。传统 VDI 容错靠 Broker 层调度这里客户端把节点列表打乱后逐个尝试一台节点挂了自动换下一台。维度传统 VDI 方案PVE-VDIClientBroker 层需 Broker数据库无直调 PVE API用户权限体系另建一套复用 Proxmox RBAC客户端形态Agent安装包单脚本/单文件 exe许可费用按用户计费开源无许可拆开看它怎么跑的整个程序就是一个约千行的 Python 脚本拆成三层接入层管登录协议层管连接管理层管看见什么。接入层一份配置定好登录入口这段定义往哪登录、怎么登录。hostpool 是 PVE 节点清单客户端登录时逐个尝试加节点就加一行花括号和缩进写错整个配置会解析失败。[Hosts.PVE] hostpool { 10.10.10.100 : 8006, 10.10.10.111 : 8006 } auth_backend pve auth_totp false tls_verify true配置文件默认在固定位置查找Linux 下 /etc/vdiclient/vdiclient.iniWindows 下 %APPDATA%\VDIClient也可以用 --config_location 指定或 --config_type http 从服务器拉取。auth_totp 置 true 后登录界面会多出一个 6 位动态码输入框。协议层把 SPICE 参数交给 remote-viewer用户点 Connect 时客户端自己并不画画面它先向 PVE 要这台虚机的 SPICE 连接参数再拼成一份标准 virt-viewer 配置通过 stdin 喂给系统里的 remote-viewervirt-viewer 自带的查看器Windows 上是 Virt-Viewer。机器上没装查看器客户端直接报错退出。# 向 PVE 要这台虚机的 SPICE 连接参数含 proxy 地址 spiceconfig G.proxmox.nodes(vmnode).qemu(str(vmid)).spiceproxy.post() # 拼成 virt-viewer 配置proxy 若命中重写表则替换 confignode[virt-viewer][key] f{value} # 启动 remote-viewer- 表示从 stdin 读配置 process subprocess.Popen(pcmd, stdinsubprocess.PIPE) process.communicate(inputinistring.encode(utf-8), timeout5)所以画面质量由 SPICE 参数和网络决定客户端只是 PVE API 和查看器之间的调度员。管理层只列你有权限的机器登录后客户端调 PVE 的集群资源接口过滤两条跳过离线节点上的虚机、跳过模板。你看到的清单恰好就是你有权限的机器分页展示。for node in G.proxmox.cluster.resources.get(typenode): if node[status] online: nodes.append(node[node]) for vm in G.proxmox.cluster.resources.get(typevm): if vm[node] not in nodes: # 离线节点上的虚机跳过 continue if vm.get(template): continue # 模板不展示每台虚机有 Connect 和 Reset 两个按钮。Reset 实际是 stop 加 start先停、轮询任务完成、再开培训机和开发机用它恢复现场生产机慎用。按角色各走一遍参与部署的通常是三类人管理员、普通用户、审计员。下面各给最短路径。管理员5 步完成首次部署apt install python3-pip python3-tk virt-viewer git clone https://gitcode.com/gh_mirrors/pv/PVE-VDIClient cd PVE-VDIClient ./requirements.sh cp vdiclient.py /usr/local/bin chmod x /usr/local/bin/vdiclient.py上面是 Debian/Ubuntu 路径RHEL 系换成 dnf install python3-pip python3-tkinter virt-viewer。参照仓库里的 vdiclient.ini.example 写 /etc/vdiclient/vdiclient.ini。在 PVE 侧给用户按虚机授权 VM.PowerMgmt、VM.Console、VM.Audit。Windows 先装 Virt-Viewer再装官方 MSI或用 WIX 3.14 自己打包签名版。测试机上先开 inidebug True核对传给查看器的 SPICE 配置确认无误再关。普通用户3 步开出桌面运行客户端在登录界面选择 Server Group多集群环境才需要选。输入账号、密码启用双因素时还要填动态码点 Log In。在虚机清单点 Connect用完关掉查看器窗口客户端有无操作超时timeout分钟到点自动退出。kiosk 环境下双击桌面图标即可窗口不可关闭查看器断连后自动退出。审计员查谁连过哪台机器测试机开 inidebug True查看某次连接传给 virt-viewer 的完整配置确认 proxy 等参数符合预期。客户端本身不落日志文件运行期错误输出到 stderr每次 SPICE 连接请求和虚机启停都会记进 PVE 侧审计日志数据中心日志页可查。给审计账号只授 VM.Audit即可查不可操作。安全威胁→对策 客户端没有额外加一层安全被问得最多的四个问题答案都在 PVE 本身和两三行配置里。问8006 开放给远程办公密码会不会被嗅探答登录和全部 API 请求都走 HTTPS8006 端口。校验证书与否由 tls_verify 决定用自签 CA 就把证书装到终端设 tls_verify true。注意示例配置里这一项是 false生产环境要显式改。问用户登录后会不会在清单里看到别人的虚机答不会。清单数据来自 PVE 资源接口只返回该用户有权看到的资源看得见就等于开得了权限边界是 Proxmox RBAC客户端不做自己的过滤。问终端是公用屏幕用户把客户端关了溜走怎么办答kiosk True 锁住窗口位置和关闭按钮连接后 virt-viewer 带 --kiosk --kiosk-quit on-disconnect 启动查看器断连即自动关闭不留残留。timeout 按分钟控制无操作释放。问用户账号泄露怎么办答开 auth_totp true登录界面多一个 6 位动态码输入框码与密码一起在 PVE 侧校验兼容标准 Authenticator 应用。也可以给终端配固定账号加 auto_vmid登录后只连指定那一台缩小泄露影响面。人多了怎么扩 扩展单位是 [Hosts.xxx] 段一段就是一个 Server Group用户在登录界面选段内可以放多个节点组里某台挂掉客户端自动换台。多环境开发/生产也不用两份程序--config_type http 指向不同 URL 即可。部署模式Hosts 段数hostpool 节点数适用用户数要点单集群单节点1150 以下hostpool 一条单集群多节点13-1050-200逐个尝试自动容错多集群2-5每集群 N 台100-1000用户选 Server Group集中配置管理任意任意1000 以上--config_type http客户端本身不存会话并发上限取决于 PVE 侧 API 和查看器进程数扩容先看 PVE 节点负载别只加客户端。日常盯什么、坏了怎么查 要盯的主要在 PVE 侧客户端这边暴露的只有一个调试开关和一张重写表。盯什么在哪看建议阈值登录失败率PVE 审计日志持续大于 5%首次连接耗时计时/用户反馈大于 10 秒无操作会话数timeout 设置超预期并发集群在线节点数集群资源接口非全部在线先查连接。在客户端机器上 curl -k https://节点地址:8006hostpool 全不通时报的是连接超时而不是认证错误部分可达时客户端已经切到了可达节点。再查认证。错误分两类AuthenticationError用户/密码/动态码错和超时。核对用户格式 userpve、权限是否按虚机授、totp 开关是否与配置一致。最后查性能。inidebug True 看传给查看器的完整配置若 SPICE proxy 地址在终端侧不通跨 NAT 很常见在 [SpiceProxyRedirect] 里重写[SpiceProxyRedirect] # 左边是 PVE 返回的 proxy 地址右边是终端实际可达地址 pve1.example.com:3128 123.123.123.123:6000接下来能做什么本周可落地写一份 vdiclient.ini参照 vdiclient.ini.example指向一个集群先在一台测试机上跑通。给一个测试用户授 VM.PowerMgmt / VM.Console / VM.Audit验证只看得见自己的机器和开得了两件事。kiosk 与 fullscreen 置 true找一台公共区终端放一周观察使用反馈。远一点的方向用 --config_type http 下发配置改集群地址不用逐台终端改 ini。PyInstaller 打单文件 exe或 WIX 打 MSI 做内网分发和签名。多集群拆成 Hosts.北京 / Hosts.上海配合 auto_vmid 登录后直达固定桌面。回到周五 17:40收回测试机入口不用逐台登主机改配置——在 PVE 里删掉对应权限用户下次打开客户端清单里那几台机器就不见了。入口的真正载体是权限客户端只是权限的镜像。建议先把 hostpool、三项权限、kiosk 这三处配置改完今晚就能让前端同事自己开桌面。【免费下载链接】PVE-VDIClientProxmox based VDI client项目地址: https://gitcode.com/gh_mirrors/pv/PVE-VDIClient创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考