2010-10-11 2 views
1

Я пытаюсь использовать ftps для загрузки файла на наш FTP-сервер. Войти тривиален и работает:Как загрузить файл на сервере FTPS с использованием m2crypto

from M2Crypto import ftpslib 
ftp = ftpslib.FTP_TLS() 
ftp.connect(host) 
ftp.login(username, password) 

, а также спуск в каталог

for dir in directory: 
    ftp.cwd(dir) 

Однако при попытке извлечения содержимого каталога:

if directory_name not in ftp.nlst(): 
    ftp.mkd(directory_name) 

я получаю 522 ошибку:

File "/usr/lib/python2.5/ftplib.py", line 459, in nlst 
    self.retrlines(cmd, files.append) 
File "/usr/lib/python2.5/ftplib.py", line 407, in retrlines 
    conn = self.transfercmd(cmd) 
File "/usr/lib/python2.5/ftplib.py", line 356, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
File "/var/lib/python-support/python2.5/M2Crypto/ftpslib.py", line 86, in ntransfercmd 
    conn, size = FTP.ntransfercmd(self, cmd, rest) 
File "/usr/lib/python2.5/ftplib.py", line 327, in ntransfercmd 
    resp = self.sendcmd(cmd) 
File "/usr/lib/python2.5/ftplib.py", line 241, in sendcmd 
    return self.getresp() 
File "/usr/lib/python2.5/ftplib.py", line 216, in getresp 
    raise error_perm, resp 
ftplib.error_perm: 522 Data connections must be encrypted. 

Кажется, TL S используется только для рукопожатия, а не для передач.

Это способ защитить передачу (я хотел бы загрузить файлы с помощью storbinary()) с помощью M2Crypto? Если нет, то каковы другие альтернативы?

ответ

3

решение является явно вызвать для защищенной передачи после login():

ftp.prot_p()