IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Proxmox VE vncproxy noVNC 配置备忘录

    YY.K发表于 2024-11-12 10:05:00
    love 0

    PVE直接封装了WebSocket, 需要调用 VNC 和 xterm的几种方案:

    1. 给虚拟机配置单独的 vnc监听端口和 ip并设置密码直接连接, 或者拿websockify转WebSocket

    2.重新封装转发/api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket  

    3.直接访问 PVE 原生接口方式。(1.直接访问 2.nginx单独封装反向代理xtermjs和novnc|)

     

    前期准备

    GET /api2/json/access/ticket
    POST /api2/json/nodes/{node}/qemu/{vmid}/vncproxy
    wss /api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket

     vncproxy 和 ticket 需要一起创建,noVNC连接vncwebsocket 需要 PVEAuthCookie才能正常通信否则无法连接。

    注意:请求/api2/json/access/ticket必须要用户密码获取,用root token无法创建。
    PVE 的设计思路是将 VM 分配给用户,但是没给token设计获取 ticket 应该是考虑权限分离。

     

    偷懒思路解决方案,直接nginx代理 PVE 的 noVNC和xterm(又不想开放 PVE 访问)

    map $arg_node  $proxyhost  {
       "PVE NODE NAME-1"  "PVE IP";
       "PVE NODE NAME-1"  "PVE IP";
       "PVE NODE NAME-1"  "PVE IP";
    }
    
    location ~/(xtermjs|novnc|api2) {
         if ( $arg_console ) { set $new_uri /?$query_string;  }
            proxy_pass https://$proxyhost:8006$new_uri;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }

    如果有安装 redis 插件, 可以从 redis 存取主机 IP, 另外还有一个版本由于安全问题暂不公开。 

    和代理websocket方法一样也是需要保证wss通信的时候要带上PVEAuthCookie的 cookies

    [...]



沪ICP备19023445号-2号
友情链接