web-dev-qa-db-ja.com

FTPES-Pythonの明示的なTLS / SSLを介したFTP

FTPES(明示的)を実行するにはpythonクライアントが必要ですが、これを実行できるpythonパッケージの経験はありますか?.

Pythonでこれを行うことはできませんが、FileZillaなどのツールを使用してFTPサーバーに接続できます

ありがとう

16
user424060

FTP-SSL Explicitは、ネイティブ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()
18
SilentSteel

私にとってこれはうまくいきました:(認証後にログイン)。 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)
8
user2099394

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)

私のグーグルは、ftp over sslが ftplib で利用できる可能性があることを示していますが、私はこのメカニズムを自分で試していません... FTP_TLSメソッドはpython 2.7でのみ追加されました

0
Mike Pennington

標準のftplibには、ftpes(ftps明示的)接続に必要なものがすべて含まれています。暗黙の接続を確立する簡単な方法が見つかりませんでした。

参照: http://docs.python.org/2/library/ftplib.html#ftplib.FTP_TLS

0
Sami Lehtinen