首页/云/云平台与虚拟化速查/virsh 查看与配置 VNC 访问
虚拟化操作94 条

virsh 查看与配置 VNC 访问

libvirt 默认为虚机提供 VNC 图形控制台:vncdisplay 查看监听地址与端口,XML 中 graphics 节点决定监听与认证;生产环境建议仅监听本机并通过 SSH 隧道访问。

云平台与虚拟化速查云更新于 2026-10-13

virsh 与 VNC 图形控制台

libvirt 默认为虚机提供 VNC 图形控制台:虚机定义里的 graphics 节点决定监听地址、端口与认证方式,virsh vncdisplay 可以查到实际生效的显示编号。生产环境的常见做法是让 VNC 只监听本机回环地址,管理员通过 SSH 隧道访问——这样既保留了图形控制台的能力,又不必把无强认证的 VNC 直接暴露在网络上。

基本信息

适用平台使用 libvirt 与 QEMU 的 Linux 宿主,宿主需安装 VNC 客户端能力
查看端口virsh vncdisplay <域>,输出形如 127.0.0.1:0
端口换算显示编号 0 对应 5900,编号 1 对应 5901,依次递增
XML 节点graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'
访问方式SSH 本地端口转发后在本地客户端连回环地址
权限要求查看显示信息只需普通域权限,改监听地址需要编辑域定义

典型使用场景

  • 虚机安装操作系统时用图形界面操作,比串口更直观
  • 虚机网络不通、无法远程登录,用图形控制台恢复网络配置
  • Windows 虚机排障:查看蓝屏界面与登录状态
  • 调整引导顺序或在固件界面改设置
  • 查看桌面环境状态,确认图形会话是否正常启动
  • 临时交付给同事查看界面:通过各自建立的隧道访问,不共享密码

查看端口并建立隧道

查看端口并建立隧道
virsh vncdisplay vm1                  # 输出例如 127.0.0.1:0,即监听 5900 端口
virsh dumpxml vm1 | grep -A2 -i 'graphics'   # 查看监听地址、端口与认证配置
# 本地终端建立 SSH 隧道(-N 表示不执行远端命令):
ssh -N -L 5900:127.0.0.1:5900 root@node1
# 本地 VNC 客户端连接 127.0.0.1:5900,流量经 SSH 加密
ss -lntp | grep 5900                  # 在宿主确认监听地址是本机回环而不是全网
virsh vncdisplay vm2                  # 多台虚机时逐一确认,避免连错编号

输出与问题读法

现象含义处理方向
127.0.0.1:0仅监听回环,显示编号 0建隧道后连接本地 5900 端口
0.0.0.0:1监听所有网卡,编号 1高危配置,改回回环并限制访问来源
vncdisplay 无输出该域没有图形设备检查域定义中的 graphics 节点是否存在
连接被拒绝端口未监听或隧道未建立确认虚机运行中、端口号正确、隧道进程未退出
提示密码错误VNC 密码与预期不一致从域定义中查看密码配置,或按要求重设
端口被占用自动分配端口与既有服务冲突让 libvirt 自动分配,按 vncdisplay 实际值连接
VNC 端口是编号加 5900:用 vncdisplay 查到的编号做换算,比按文件里的配置猜更可靠,尤其是在自动分配端口的情况下。
把 listen 改成 0.0.0.0 直接连用属于高风险配置:VNC 认证强度有限,一旦暴露到公网,等于把虚机控制权放到了外面。

易错点

  • 把 listen 改为全网监听:无强认证的 VNC 暴露,容易被扫描并尝试接管
  • 端口按文档写死的值去连:实际端口由自动分配决定,连不上时先查 vncdisplay
  • 多人共享同一个 VNC 会话与密码:操作无法追溯,互相打断输入
  • 隧道断开后直接重连旧端口:虚机重启后端口可能已变,需重新查询
  • 把 VNC 当远程桌面的替代:VNC 不校验会话隔离,同一时间只能一人有效操作

数据来源与参考

  • libvirt 文档:Graphics 设备(VNC)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌