Как загрузить файл на сервер FTPS, используя m2crypto - PullRequest
1 голос
/ 11 октября 2010

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

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.

Похоже, TLS используется только для рукопожатия, а не для передачи.

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

1 Ответ

3 голосов
/ 11 октября 2010

Решение заключается в явном вызове защищенного перевода после login():

ftp.prot_p()
...