<div dir="ltr">This is as far as I got, but I am not properly authenticated.<div>The program is below.</div><div><br>The error I get is:</div><div><div>  File "/home/frans/lxd/websock.py", line 42, in <module></div><div>    ws.connect(wsurl)</div><div>  File "/usr/local/lib/python2.7/dist-packages/websocket/_core.py", line 211, in connect</div><div>    options.pop('socket', None))</div><div>  File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 77, in connect</div><div>    sock = _ssl_socket(sock, options.sslopt, hostname)</div><div>  File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 179, in _ssl_socket</div><div>    sock = _wrap_sni_socket(sock, sslopt, hostname, check_hostname)</div><div>  File "/usr/local/lib/python2.7/dist-packages/websocket/_http.py", line 160, in _wrap_sni_socket</div><div>    server_hostname=hostname,</div><div>  File "/usr/lib/python2.7/ssl.py", line 353, in wrap_socket</div><div>    _context=self)</div><div>  File "/usr/lib/python2.7/ssl.py", line 601, in __init__</div><div>    self.do_handshake()</div><div>  File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake</div><div>    self._sslobj.do_handshake()</div><div>ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)</div><div><br></div><div>Obviously something wrong with certificates, but what ?</div><div>Anyone a clue?</div><div><br></div><div>Thanks, Frans</div><div><br></div><div><pre style="color:rgb(0,0,0);font-family:"dejavu sans mono";font-size:9pt"><span style="color:rgb(128,128,128);font-style:italic">#!/usr/bin/python2<br></span><span style="color:rgb(0,0,128);font-weight:bold">import </span>json<br><span style="color:rgb(0,0,128);font-weight:bold">import </span>requests<br><span style="color:rgb(0,0,128);font-weight:bold">import </span>sys<br><span style="color:rgb(0,0,128);font-weight:bold">import </span>websocket<br><span style="color:rgb(0,0,128);font-weight:bold">import </span>urllib<br>URL = <span style="color:rgb(0,128,128);font-weight:bold">'<a href="http://127.0.0.1:8443">127.0.0.1:8443</a>'<br></span><span style="color:rgb(0,128,128);font-weight:bold"><br></span><span style="color:rgb(0,0,128);font-weight:bold">if </span><span style="color:rgb(0,0,128)">len</span>(sys.argv) < <span style="color:rgb(0,0,255)">2</span>:<br>    <span style="color:rgb(0,0,128)">print</span>(<span style="color:rgb(0,128,128);font-weight:bold">'usage: exec <container> cmd'</span>)<br>    sys.exit(<span style="color:rgb(0,0,255)">1</span>)<br><br>u=<span style="color:rgb(0,128,128);font-weight:bold">'https://%s/1.0/containers/%s/exec' </span>% (URL, sys.argv[<span style="color:rgb(0,0,255)">1</span>])<br>cert = (<span style="color:rgb(0,128,128);font-weight:bold">'client.crt'</span>, <span style="color:rgb(0,128,128);font-weight:bold">'client.key'</span>)<br>command = {<br>    <span style="color:rgb(0,128,128);font-weight:bold">"command"</span>: sys.argv[<span style="color:rgb(0,0,255)">2</span>:],<br>    <span style="color:rgb(0,128,128);font-weight:bold">"wait-for-websocket"</span>: <span style="color:rgb(0,0,128);font-weight:bold">True</span>,<br>}<br>params = json.dumps(command)<br><span style="color:rgb(0,0,128)">print</span>(u)<br><span style="color:rgb(0,0,128)">print</span>(params)<br>r = requests.post(u, <span style="color:rgb(102,0,153)">data</span>=params, <span style="color:rgb(102,0,153)">verify</span>=<span style="color:rgb(0,0,128);font-weight:bold">False</span>, <span style="color:rgb(102,0,153)">cert</span>=cert)<br>content = json.loads(r.text)<br>op = content[<span style="color:rgb(0,128,128);font-weight:bold">'operation'</span>]<br>fds = content[<span style="color:rgb(0,128,128);font-weight:bold">'metadata'</span>][<span style="color:rgb(0,128,128);font-weight:bold">'metadata'</span>][<span style="color:rgb(0,128,128);font-weight:bold">'fds'</span>]<br>sockets = {}<br><br>stdout = <span style="color:rgb(0,128,128);font-weight:bold">'1'<br></span>stdin = <span style="color:rgb(0,128,128);font-weight:bold">'0'<br></span>stderr = <span style="color:rgb(0,128,128);font-weight:bold">'2'<br></span><span style="color:rgb(0,128,128);font-weight:bold"><br></span>ssl_options = {<br>       <span style="color:rgb(0,128,128);font-weight:bold">"certfile"</span>: <span style="color:rgb(0,128,128);font-weight:bold">"client.crt"</span>,<br>       <span style="color:rgb(0,128,128);font-weight:bold">"keyfile"</span>: <span style="color:rgb(0,128,128);font-weight:bold">"client.key"</span>,<br>    };<br><br><span style="color:rgb(0,0,128);font-weight:bold">for </span>fd <span style="color:rgb(0,0,128);font-weight:bold">in </span>[stdin, stdout, stderr]:<br>    secret = urllib.urlencode({<span style="color:rgb(0,128,128);font-weight:bold">'secret'</span>: fds[fd]})<br>    wsurl = <span style="color:rgb(0,128,128);font-weight:bold">'wss://%s%s/websocket?%s' </span>%(URL, op, secret)<br>    ws = websocket.WebSocket(<span style="color:rgb(102,0,153)">sslopt</span>=ssl_options)<br>    ws.connect(wsurl)<br><br>    sockets[fd] = ws<br><br><span style="color:rgb(128,128,128);font-style:italic"># stdout = 1, stderr = 2<br></span>output = sockets[stdout].recv()<br>error = sockets[stderr].recv()<br><br><span style="color:rgb(0,0,128)">print</span>(output)<br></pre></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-02-15 16:28 GMT+01:00 Frans Meulenbroeks <span dir="ltr"><<a href="mailto:fransmeulenbroeks@gmail.com" target="_blank">fransmeulenbroeks@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Hi,<br><br></div>I was wondering if someone could help me a bit with exec over the REST API (in python in my case).<br><br></div>I found this example: <a href="https://github.com/lxc/lxd/issues/231" target="_blank">https://github.com/lxc/lxd/<wbr>issues/231</a> but unfortunately this did not work for me (after changing 8080 to 8443).<br><br>I suspect this is caused by missing authentication, but as I am a websocket n00b, I was wondering if someone could help me out by providing some more info, a link or a code snippet.<br><br></div>Also: should I use ws:// or wss:// ?<br><br></div>Thanks for any help!<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888">Frans<br></font></span></div>
</blockquote></div><br></div>