如何使用m2crypto在FTPS服务器上上传文件

时间:2010-10-11 15:54:43

标签: python ftp ssl m2crypto

我正在尝试使用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仅用于握手,而不用于转移。

有哪种方法可以使用M2Crypto保护传输(我想使用storbinary()上传文件)?如果没有,还有什么其他选择?

1 个答案:

答案 0 :(得分:3)

解决方案是在login()之后显式调用受保护的传输:

ftp.prot_p()