ESXi:为每台机器自动分配 vnc 端口

ESXi: auto assign vnc port for each machine

我需要在 ESXi 主机上使用 VM 运行 的远程控制台。为此,我需要使用 VNC。为此,我需要使用下面给出的设置手动或以编程方式(当然,通过编辑 VMX 文件)为每个 VM 分配 TCP 端口。

remotedisplay.vnc.port="5900"
remotedisplay.vnc.enabled="true"
remotedisplay.vnc.password = "yourpassword"

是否有任何机制(最好是 psphere API)可以让 ESX 自动为所有机器或单个机器分配端口?

感谢和问候,
象头神

PS。我正在使用 Ubuntu 14 并想通过浏览器连接 VM。

您可以做的是通过 ssh 连接到 esx 服务器并在 vmx 文件中附加这些属性。

echo -e "RemoteDisplay.vnc.enabled = true\nRemoteDisplay.vnc.port = 5900\nRemoteDisplay.vnc.password = \"yourpassword\"" >> /vmfs/volumes/YOURDATASTORE/YOURVMNAME/YOURVMNAME.vmx

或在一个命令中

sshpass -p PASSWORD ssh root@10.54.140.145 "echo -e \"RemoteDisplay.vnc.enabled = true\nRemoteDisplay.vnc.port = 5900\nRemoteDisplay.vnc.password = \"yourpassword\"\" >> /vmfs/volumes/YOURDATASTORE/YOURVMNAME/YOURVMNAME.vmx"

如果这不是您的 vmx 路径,您也可以使用

动态获取它
vim-cmd vmsvc/getallvms | grep VMNAME | awk '{print }'

或全部在一行中

sshpass -p PASSWORD ssh root@10.54.140.145 "echo -e \"RemoteDisplay.vnc.enabled = true\nRemoteDisplay.vnc.port = 5900\nRemoteDisplay.vnc.password = \"yourpassword\"\" >> $(vim-cmd vmsvc/getallvms | grep VMNAME | head -1 | awk '{print }')"

这就是我使用 pysphere 让它工作的方法

>>> from pysphere import VIServer
>>> s = VIServer()
>>> s.connect('10.11.100.220', 'root', 'password')
>>> vm = s.get_vm_by_name("VMNAME")
>>> settings = {'remotedisplay.vnc.port': '8949', 'remotedisplay.vnc.enabled' : 'true'}
>>> vm.set_extra_config(settings)
>>> s.disconnect()