FTPES-在Python中通过显式TLS/SSL的FTP

2024-03-28 15:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

如果您可以使用sftp客户机,它提供了paramiko。。。但是,sftp和ftp over ssl(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)

我的google显示,通过ssl的ftp可能在ftplib中可用,尽管我自己还没有尝试过这种机制。。。FTP_TLS方法仅在python 2.7中添加

本地Python很好地支持FTP-SSL显式。设置连接后,可以使用所有标准的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()

对我来说这很有效:(在授权后登录)。取自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)

相关问题 更多 >