tags:

views:

1442

answers:

6

Hi People,

I was wondering if anybody could point me towards a free ftps module for python.

I am a complete newbie to python, but this is something I need for a work project. I need an ftps client to connect to a 3rd party ftps server.

thanks,

David.

A: 

I haven't tried it myself (yes, I just used Google and followed some links), but http://www.lag.net/paramiko/ seems to be the recommended solution. From a cursory glance, it's an SSH implementation in pure Python, which allows tunneling for things like FTP.

Update: a commenter pointed out that I mixed up sftp and ftps, sorry. I still suggest at least investigating Paramiko briefly to see if it matches the requirements.

unwind
sftp and ftps are not the same.
J.F. Sebastian
+3  A: 

Twisted seems to have some implementation of FTPS (FTP over SSL) under the conch sub-project. I am no twisted expert, but Glyph, the twisted man himself, is listed in this site. Maybe by following his answer to another question, you can find more details (good luck).

gimel
Thanks for the plug :). But FTPS (FTP, but over SSL) is not the same thing as SFTP (file transfer over SSH, not really related to the FTP protocol at all).
Glyph
You are welcome ;). Thanks for the answer.
gimel
+7  A: 

I believe you could use Twisted to implement FTPS by simply using its FTP implementation, but changing the FTPClient.connectFactory attribute to be a function that does something with connectSSL rather than connectTCP.

Are you sure you want FTPS though? SFTP is a different, better, and much more popular protocol these days: Twisted contains an SFTP implementation as well.

Glyph
A: 

I couldn't find a free sftp client for windows so I ended up wrapping Putty's PSFTP using python's subprocess module. I probably would have used the twisted implementation mentioned by Glyph if i'd known about it.

Anyway if your interested it's available at:

http://code.google.com/p/psftplib/

monkut
+2  A: 

M2Cypto has a FTPS module. From the documentation:

>>> from M2Crypto import ftpslib
>>> f = ftpslib.FTP_TLS()
>>> f.connect('', 9021)
'220 spinnaker.dyndns.org M2Crypto (Medusa) FTP/TLS server v0.07 ready.'
>>> f.auth_tls()
>>> f.set_pasv(0)
>>> f.login('ftp', 'ngps@')
'230 Ok.'
>>> f.retrlines('LIST')
-rw-rw-r--   1 0        198          2326 Jul  3  1996 apache_pb.gif
drwxrwxr-x   7 0        198          1536 Oct 10  2000 manual
drwxrwxr-x   2 0        198           512 Oct 31  2000 modpy
drwxrwxr-x   2 0        198           512 Oct 31  2000 bobo
drwxr-xr-x   2 0        198         14336 May 28 15:54 postgresql
drwxr-xr-x   4 100      198           512 May 16 17:19 home
drwxr-xr-x   7 100      100          3584 Sep 23  2000 openacs
drwxr-xr-x  10 0        0             512 Aug  5  2000 python1.5
-rw-r--r--   1 100      198           326 Jul 29 03:29 index.html
drwxr-xr-x  12 0        0             512 May 31 17:08 python2.1
'226 Transfer complete'
>>> f.quit()
'221 Goodbye.'
>>>

Alternatively, if you wanted to minimise use of third-party modules, you should be able to subclass the standard library's ftplib.FTP class with the built-in (to Python) SSL support. M2Crypto (or Twisted, if you want to go that way) is the easier solution, though.

Tony Meyer
A: 

As for the server implementation you can take a look at pyftpdlib: http://code.google.com/p/pyftpdlib/ It includes a demo script implementing a working FTPS server: http://code.google.com/p/pyftpdlib/source/browse/trunk/demo/tls_ftpd.py

As for the client implementation I provided a patch which will be included in python 2.7 and 3.2. http://bugs.python.org/issue2054

Giampaolo Rodolà