2011-04-04 183 views

回答

0

如果可以使用SFTP客户端连接到FTP服务器,它具备的paramiko ...但是,SFTP和基于SSL的FTP(FTPS)是不同的...

import paramiko as pm 
import socket 
# sftp client... 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(20) 
sock.connect((hostname, port)) 
trans = pm.Transport(sock) 
trans.connect(hostkey=None ,username=username, password=password, pkey=None) 
chan = trans.open_session() 
chan.get_pty() 
chan.invoke_shell() 
sftp = pm.SFTP.from_transport(trans) 

我的谷歌搜索表明,基于SSL的FTP可能在ftplib是可用的,虽然我还没有尝试过这种机制自己...的FTP_TLS方法只添加在python 2.7

9

FTP-SSL明确深受原生的Python的支持。建立连接后,您可以使用所有标准的ftplib命令。更可以在这里找到: http://docs.python.org/2/library/ftplib.html#ftplib.FTP_TLS

下面是下载文件的基本示例:

from ftplib import FTP_TLS 
ftps = FTP_TLS('ftp.MySite.com') 
ftps.login('testuser', 'testpass')   # login anonymously before securing control channel 
ftps.prot_p()   # switch to secure data connection.. IMPORTANT! Otherwise, only the user and password is encrypted and not all the file data. 
ftps.retrlines('LIST') 

filename = 'remote_filename.bin' 
print 'Opening local file ' + filename 
myfile = open(filename, 'wb') 

ftps.retrbinary('RETR %s' % filename, myfile.write) 

ftps.close() 
2

对于我这样的工作:(登录身份验证后)。取自Nullege。他们似乎是ftplib的测试。

self.client = ftplib.FTP_TLS(timeout=10) 
self.client.connect(self.server.host, self.server.port) 

# enable TLS 
self.client.auth() 
self.client.prot_p() 

self.client.login(user,pass)