IPython 1.0.0a1 -- An enhanced Interactive Python. In [1]: from ftplib import FTP_TLS In [2]: ftps = FTP_TLS('ftps.test.com') In [4]: ftps.login(user='user', passwd='passwd') Out[4]: '230 Login successful.' In [5]: ftps.prot_c() Out[5]: '200 PROT now Clear.' In [6]: ftps.retrlines('LIST') --------------------------------------------------------------------------- error_perm Traceback (most recent call last) ----> 1 ftps.retrlines('LIST') /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in retrlines(self, cmd, callback) 704 if callback is None: callback = print_line 705 resp = self.sendcmd('TYPE A') --> 706 conn = self.transfercmd(cmd) 707 fp = conn.makefile('rb') 708 try: /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in transfercmd(self, cmd, rest) 366 def transfercmd(self, cmd, rest=None): 367 """Like ntransfercmd() but returns only the socket.""" --> 368 return self.ntransfercmd(cmd, rest)[0] 369 370 def login(self, user = '', passwd = '', acct = ''): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in ntransfercmd(self, cmd, rest) 679 680 def ntransfercmd(self, cmd, rest=None): --> 681 conn, size = FTP.ntransfercmd(self, cmd, rest) 682 if self._prot_p: 683 conn = ssl.wrap_socket(conn, self.keyfile, self.certfile, /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in ntransfercmd(self, cmd, rest) 329 if rest is not None: 330 self.sendcmd("REST %s" % rest) --> 331 resp = self.sendcmd(cmd) 332 # Some servers apparently send a 200 reply to 333 # a LIST or STOR command, before the 150 reply /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in sendcmd(self, cmd) 242 '''Send a command and return the response.''' 243 self.putcmd(cmd) --> 244 return self.getresp() 245 246 def voidcmd(self, cmd): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in getresp(self) 217 raise error_temp, resp 218 if c == '5': --> 219 raise error_perm, resp 220 raise error_proto, resp 221 error_perm: 522 Data connections must be encrypted. In [7]: ftps.prot_p() Out[7]: '200 PROT now Private.' In [8]: ftps.retrlines('LIST') --------------------------------------------------------------------------- error_perm Traceback (most recent call last) ----> 1 ftps.retrlines('LIST') /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in retrlines(self, cmd, callback) 723 fp.close() 724 conn.close() --> 725 return self.voidresp() 726 727 def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in voidresp(self) 222 def voidresp(self): 223 """Expect a response beginning with '2'.""" --> 224 resp = self.getresp() 225 if resp[:1] != '2': 226 raise error_reply, resp /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in getresp(self) 217 raise error_temp, resp 218 if c == '5': --> 219 raise error_perm, resp 220 raise error_proto, resp 221 error_perm: 522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page In [9]: ftps.ntransfercmd('LIST') Out[9]: (, None) In [10]: ftps.transfercmd('LIST') --------------------------------------------------------------------------- error_perm Traceback (most recent call last) ----> 1 ftps.transfercmd('LIST') /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in transfercmd(self, cmd, rest) 366 def transfercmd(self, cmd, rest=None): 367 """Like ntransfercmd() but returns only the socket.""" --> 368 return self.ntransfercmd(cmd, rest)[0] 369 370 def login(self, user = '', passwd = '', acct = ''): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in ntransfercmd(self, cmd, rest) 679 680 def ntransfercmd(self, cmd, rest=None): --> 681 conn, size = FTP.ntransfercmd(self, cmd, rest) 682 if self._prot_p: 683 conn = ssl.wrap_socket(conn, self.keyfile, self.certfile, /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in ntransfercmd(self, cmd, rest) 324 size = None 325 if self.passiveserver: --> 326 host, port = self.makepasv() 327 conn = socket.create_connection((host, port), self.timeout) 328 try: /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in makepasv(self) 302 def makepasv(self): 303 if self.af == socket.AF_INET: --> 304 host, port = parse227(self.sendcmd('PASV')) 305 else: 306 host, port = parse229(self.sendcmd('EPSV'), self.sock.getpeername()) /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in sendcmd(self, cmd) 242 '''Send a command and return the response.''' 243 self.putcmd(cmd) --> 244 return self.getresp() 245 246 def voidcmd(self, cmd): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in getresp(self) 217 raise error_temp, resp 218 if c == '5': --> 219 raise error_perm, resp 220 raise error_proto, resp 221 error_perm: 522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page In [29]: ftps.retrlines('LIST') --------------------------------------------------------------------------- error_perm Traceback (most recent call last) ----> 1 ftps.retrlines('LIST') /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in retrlines(self, cmd, callback) 723 fp.close() 724 conn.close() --> 725 return self.voidresp() 726 727 def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in voidresp(self) 222 def voidresp(self): 223 """Expect a response beginning with '2'.""" --> 224 resp = self.getresp() 225 if resp[:1] != '2': 226 raise error_reply, resp /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in getresp(self) 217 raise error_temp, resp 218 if c == '5': --> 219 raise error_perm, resp 220 raise error_proto, resp 221 error_perm: 522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page In [31]: ftps.set_debuglevel(2) In [32]: ftps.retrlines('LIST') *cmd* 'TYPE A' *put* 'TYPE A\r\n' *get* '200 Switching to ASCII mode.\r\n' *resp* '200 Switching to ASCII mode.' *cmd* 'PASV' *put* 'PASV\r\n' *get* '227 Entering Passive Mode (67,215,160,57,195,91).\r\n' *resp* '227 Entering Passive Mode (67,215,160,57,195,91).' *cmd* 'LIST' *put* 'LIST\r\n' *get* '150 Here comes the directory listing.\r\n' *resp* '150 Here comes the directory listing.' *get* '522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page\r\n' *resp* '522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page' --------------------------------------------------------------------------- error_perm Traceback (most recent call last) ----> 1 ftps.retrlines('LIST') /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in retrlines(self, cmd, callback) 723 fp.close() 724 conn.close() --> 725 return self.voidresp() 726 727 def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in voidresp(self) 222 def voidresp(self): 223 """Expect a response beginning with '2'.""" --> 224 resp = self.getresp() 225 if resp[:1] != '2': 226 raise error_reply, resp /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in getresp(self) 217 raise error_temp, resp 218 if c == '5': --> 219 raise error_perm, resp 220 raise error_proto, resp 221 error_perm: 522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page