将监听 5901 端口的 KVM VM 更改为其他端口

将监听 5901 端口的 KVM VM 更改为其他端口

好吧,这确实有点愚蠢,但却是真正的问题。

vncserver继续绑定在 5902 端口上。这是因为qemu正在监听 5900 和 5901:

% netstat -lntup 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:5900          0.0.0.0:*               LISTEN      1090/qemu-system-x8 
tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN      1137/qemu-system-x8 
tcp        0      0 0.0.0.0:5902            0.0.0.0:*               LISTEN      7163/Xtightvnc      
tcp        0      0 0.0.0.0:6002            0.0.0.0:*               LISTEN      7163/Xtightvnc

我怀疑这与我在 VM 配置中将显示设置为 VNC 有关。信不信由你,否则 VM 控制台中的键盘将不起作用(至少在实际操作系统启动开始之前)。在 Stack 上找到它,它是真实的。

所以问题是我可以更改虚拟机正在监听的 VNC 端口吗?否则Xtightvnc总是会设置桌面,examplehost:2这会妨碍我的其他脚本。

我用它来运行这些虚拟机virt-manager

答案1

这项技术被称为虚拟器,而你提到的virt-manager只是它的一个客户端。

这是正常的默认行为。让我们看看在文档中

...
<devices>
  ...
  <graphics type='vnc' port='5904' sharePolicy='allow-exclusive'>
    <listen type='address' address='1.2.3.4'/>
  </graphics>
  <graphics type='rdp' autoport='yes' multiUser='yes' />
  ...
</devices>
...

...

vnc

启动 VNC 服务器。该port属性指定 TCP 端口号(使用 -1 作为旧语法,表示应自动分配)。该autoport属性是用于指示要使用的 TCP 端口的自动分配的新首选语法。该passwd属性以明文形式提供 VNC 密码。如果将该passwd属性设置为空字符串,则禁用 VNC 访问。该keymap属性指定要使用的键映射。可以通过提供passwdValidTo='2010-04-09T15:51:00'假定为 UTC 的时间戳来设置密码有效性的限制。该connected属性允许在更改密码期间控制连接的客户端。VNC 仅接受保留值自 0.9.3 起。请注意,并非所有虚拟机管理程序都支持此功能。

因此,如果autoport使用功能(默认virt-manager),则在启动 VM 时,它会被分配第一个可用端口,从 5900 开始:第一个端口分配 5900,下一个分配 5901,等等。如果您以不同的顺序启动它们,它们会“交换”端口。如果您将它绑定到某个端口,它会尝试使用该端口,如果该端口繁忙,则 VM 将无法启动。

我不知道是否可以使用 更改端口virt-manager,但它不是唯一可用的 libvirt 控制客户端。使用virsh您可以直接编辑 XML 格式的 VM 定义。在服务器上:

virsh list -all
virsh edit <name>

第一个命令列出了所有虚拟机,第二个命令将打开一个默认编辑器(可能vi;您可以设置EDITOR环境变量以使用其他内容,例如尝试运行EDITOR=nano virsh edit <name>)。保存并退出编辑器后,您需要停止然后开始VM 以使更改生效;重新启动是不够的,因为它不会重新启动 Qemu 进程

virsh shutdown <name>
virsh start <name>

(或者从 virt-manager GUI)。

它应该只绑定在指定的端口上。也可以让它监听 unix 域套接字;请进一步阅读链接的 libvirt 文档页面以了解如何操作。这将具有使用文件名的好处,从而保证不会有任何内容占用 VNC 服务器的绑定空间。我自己从未尝试过(10 多年没有使用 libvirt),我不知道 virt-manager 是否能够连接到套接字。

相关内容