You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyvmomi查询vCenter Server Appliance虚拟机时权限报错求助

使用pyVmomi连接VCSA时的权限问题及解答

错误信息

pyVmomi.VmomiSupport.vim.fault.NoPermission: (vim.fault.NoPermission) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   msg = 'Permission to perform this operation was denied.',
   faultCause = <unset>,
   faultMessage = (vmodl.LocalizableMessage) [],
   object = 'vim.Folder:group-d1',
   privilegeId = 'System.View',
   missingPrivileges = (vim.fault.NoPermission.EntityPrivileges) [
      (vim.fault.NoPermission.EntityPrivileges) {
         dynamicType = <unset>,
         dynamicProperty = (vmodl.DynamicProperty) [],
         entity = 'vim.Folder:group-d1',
         privilegeIds = (str) [
            'System.View'
         ]
      }
   ]
}

关联Python代码

import atexit
import ssl
from pyVim import connect
from pyVmomi import vim
import pdb


def vconnect(hostIP,port=None):
    if (True):
        context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
        context.check_hostname = False
        context.verify_mode = ssl.CERT_NONE  # disable our certificate checking for lab
    else:
        context = ssl.create_default_context()
        context.options |= ssl.OP_NO_TLSv1_3
    #cipher = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256'
    #context.set_ciphers(cipher)
   
    pdb.set_trace()
    if (port):
        service_instance = connect.SmartConnect(host=str(hostIP),  # build python connection to vSphere
                                                user="root",
                                                pwd="MySillyPwd",
                                                port=port,
                                                sslContext=context)
    else:
        service_instance = connect.SmartConnect(host=str(hostIP),  # build python connection to vSphere
                                                user="root",
                                                pwd="MySillyPwd",
                                                sslContext=context)

    atexit.register(connect.Disconnect, service_instance)  # build disconnect logic

    content = service_instance.RetrieveContent()

    container = content.rootFolder  # starting point to look into
    viewType = [vim.VirtualMachine]  # object types to look for
    recursive = True  # whether we should look into it recursively
    containerView = content.viewManager.CreateContainerView(container, viewType, recursive)  # create container view
    children = containerView.view

    for child in children:  # for each statement to iterate all names of VMs in the environment
        summary = child.summary
        print(summary.config.name)

# connecting to ESX host
vconnect("192.168.160.160")

# connecting to vcsa VM
vconnect("192.168.160.170", 443)

场景说明

在Workstation 16上运行嵌套ESX,通过Windows CLI在该ESX上部署VCSA。连接ESX主机查询虚拟机正常,但连接VCSA时触发上述权限错误。尝试添加默认端口443后问题依旧,查阅资料提到需设置全局权限,但当前使用VCSA设备管理界面而非vSphere Client,界面与示例不符,因此提出以下问题:


问题1:上述错误是否由试用许可证导致?

不是。试用许可证仅限制vMotion、分布式交换机等高级功能,System.View属于基础查看权限,试用版也会开放该权限。错误核心是当前使用的root账号在VCSA中缺少对应实体的查看权限。

问题2:vCenter Server管理(VCSA)设备与vSphere Client有何区别?

  • VCSA设备管理界面:是VCSA虚拟机自带的嵌入式管理页面,仅负责设备级运维,包括VCSA的系统配置、网络设置、存储管理、备份恢复、证书管理等,不涉及vSphere资源(虚拟机、主机、集群)的权限和日常运维。
  • vSphere Client:是管理vSphere整体环境的核心客户端(Web版或桌面版),可对VCSA、ESX主机、虚拟机、集群等所有vSphere资源进行权限配置、资源调度、日常运维操作。

问题3:是否可以在VCSA上修改"全局权限",还是需要使用vSphere Client操作?

无法在VCSA设备管理界面修改全局权限,必须通过vSphere Client操作,步骤如下:

  1. 登录vSphere Client(Web版地址通常为https://<VCSA-IP>/ui);
  2. 点击左上角菜单,选择系统>权限;
  3. 在权限页面点击添加权限;
  4. 选择要授权的用户(此处为root),分配包含System.View的角色(如"只读"角色或自定义角色);
  5. 勾选传播到子对象,确保权限覆盖根文件夹及所有子实体。

注意:VCSA的root账号默认是设备操作系统管理员,并非vSphere环境的全局管理员,需在vSphere Client中为其分配对应vSphere权限才能通过pyVmomi正常访问。

内容的提问来源于stack exchange,提问作者Skegg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:45:25