1

SmartConnect メソッドがエラー requests.exceptions.SSLError:[Errno8]_ssl.c をスローしますか? それを解決する方法

VMWare サーバーを自動化するために pyvmomi-5.5.0.2014.1.1 パッケージを使用しています。VMware ESXi 5.1 で同じ資格情報を使用すると、サーバーに接続できますが、コードを試してみると


    from pyVim import connect
    def connect_to_server(self, server=None, user=None, pwd=None, port=None):
    if server is None:
        server = _config_values("general", "host")
    if user is None:
        user = _config_values("general", "username")
    if pwd is None:
        pwd = _config_values("general", "password")
    if port is None:
        port = _config_values("general", "port")
    self._server = server
    self._user = user
    self._password = pwd
    self._port = int(port)
    try:
        service_instance = connect.SmartConnect("http", self._server,  self._port, self._user, self._password)
    except ConfigParseError:
        pass
    

エラー insecureplatformwarning をスローし、urllib3 urlを提案します。ページで提案されているようにパッケージ pyopenssl ndg-httpsclient pyasn1 をインストールした後、追加します


    import urllib3.contrib.pyopenssl
    urllib3.contrib.pyopenssl.inject_into_urllib3()
    

上記のコードでエラーが発生しています:

<pre><code>    
Traceback (most recent call last):
File "D:\python_learning\vmwareATF\testVmwareatf.py", line 15, in <module>
main()
File "D:\python_learning\vmwareATF\testVmwareatf.py", line 12, in main
obj.connect_to_server()
File "D:\python_learning\vmwareATF\vmwareatf\vmware.py", line 52,in      connect_to_server
service_instance = connect.SmartConnect( host=self._server,    port=self._port,  user=self._user, pwd=self._password)
File "C:\Python27\lib\site-packages\pyVim\connect.py", line 577, in SmartConnect  preferredApiVersions)
File "C:\Python27\lib\site-packages\pyVim\connect.py", line 520, in  __FindSupportedVersion    path)
File "C:\Python27\lib\site-packages\pyVim\connect.py", line 435, in __GetServiceVersionDescription
sock = requests.get(url, verify=False)
File "C:\Python27\lib\site-packages\requests\api.py", line 69, in get
return request('get', url, params=params, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 465, in  request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno bad handshake] (-1, 'Unexpected EOF')
</code></pre>
4

5 に答える 5

2

Python 3.4 の場合、hevel の回答のみが機能しました。少し短いバージョンを次に示します。

sslContext = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH)
sslContext.verify_mode = ssl.CERT_NONE
si = SmartConnect(host=host,user=username,pwd=password,sslContext=sslContext)

今日、pyvmomi ライブラリを Python 3 に移行することを決定するまで、私は Python 2.x の pyvmomi でMichaelsソリューションをうまく使用していました。Python 3.4 では、わずかに異なる ssl エラーが原因で動作を停止していました。

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed...

リバース エンジニアリングから、hevel と同じ結論に達しました。後から考えると、ここで回答を再確認するために StackOverflow に戻ってきました。

于 2015-12-25T04:31:03.367 に答える
1

This worked for python2.7.9

sslContext = ssl.create_default_context()
sslContext.check_hostname = False
sslContext.verify_mode = ssl.CERT_NONE
si = SmartConnect(host=host,user=username,pwd=password,sslContext=sslContext)
于 2015-12-18T07:09:40.577 に答える