使用pyVmomi连接vSphere 7.0.3.01400失败求助
问题:Python 3.12.1 + pyVmomi 连接vSphere 7.0.3.01400失败
我尝试使用Python 3.12.1中的pyVmomi建立与vSphere 7.0.3.01400实例的连接,两种方法均失败:
- 方法1报错无法找到支持的版本;
- 方法2出现
ssl.PROTOCOL_TLS已弃用的警告。
补充说明:我可通过REST API及相同凭证正常连接vSphere,试过多个旧示例脚本均无效,恳请提供解决方法或可用示例脚本。
方法1:版本协商失败
代码:
context = None context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE s = SmartConnect(host=vCENTER_HOST, user=vCENTER_USERNAME, pwd=vCENTER_PASSWORD, port=int('443'),sslContext=context) Disconnect(s) from pyVim.connect import SmartConnect from pyVmomi import vim import ssl context = None context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE s = SmartConnect(host=vCENTER_HOST, user=vCENTER_USERNAME, pwd=vCENTER_PASSWORD, port=int('443'),sslContext=context)
错误信息:
(line 961, in SmartConnect) supportedVersion = __FindSupportedVersion(protocol, host, port, path,
方法2:SSL弃用警告
代码:
from pyVim.connect import SmartConnect from pyVmomi import vim import ssl s = ssl.SSLContext(ssl.PROTOCOL_TLS) s.Verify_mode = ssl.CERT_NONE s = SmartConnect(host=vCENTER_HOST, user=vCENTER_USERNAME, pwd=vCENTER_PASSWORD, sslContext=s)
错误信息:
DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
解决方法及可用脚本
以下是适配Python 3.12.1和vSphere 7.0.3.01400的连接脚本,同时解决SSL警告和版本协商问题:
from pyVim.connect import SmartConnect, Disconnect from pyVmomi import vim import ssl # 创建兼容的SSL上下文,避免弃用警告并适配vSphere的TLS要求 context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) context.check_hostname = False context.verify_mode = ssl.CERT_NONE # 强制使用TLS 1.2,适配vSphere 7.x版本 context.minimum_version = ssl.TLSVersion.TLSv1_2 try: # 建立连接 service_instance = SmartConnect( host=vCENTER_HOST, user=vCENTER_USERNAME, pwd=vCENTER_PASSWORD, port=443, sslContext=context ) if not service_instance: print("连接失败,请检查凭证或vSphere地址") else: print("连接成功!") # 示例:获取vSphere版本信息 content = service_instance.RetrieveContent() print(f"vSphere版本: {content.about.version}") finally: # 确保断开连接 if service_instance: Disconnect(service_instance)
错误原因解析
- 方法1问题:
- 代码存在模块导入顺序错误(先执行连接逻辑再导入模块),导致执行流程混乱。
- Python 3.12默认SSL上下文未强制启用vSphere 7.0.3所需的TLS 1.2,引发版本协商失败。
- 方法2问题:
ssl.PROTOCOL_TLS在Python 3.10+已被弃用,应使用ssl.PROTOCOL_TLS_CLIENT作为客户端SSL上下文,并显式指定TLS版本范围。
内容的提问来源于stack exchange,提问作者Serge Dupraz
相关产品推荐
相关产品推荐

