關(guān)于pyftpdlib建立 FTP服務(wù)器的詳細內(nèi)容:
py-FTP服務(wù)器之一:虛擬運行環(huán)境
py-FTP服務(wù)器之二:用戶配置文件
py-FTP服務(wù)器之三:啟用SSL連接
py-FTP服務(wù)器之四:ftp主程序
py-FTP服務(wù)器之五:其他
主要需求
- 簡單, 文件少, 建立快速
- 用戶少, 最好只有一個, 就是用來自己傳文件的
- 開啟ssl加密
- 開啟被動模式
環(huán)境要求
- 建議在虛擬環(huán)境中建立
- 安裝模塊
pyftpdlib
和pyopenssl
文件結(jié)構(gòu)
- 主文件:
ftp.py
, 見下 - 日志文件:
log
, 自動生成 - 證書密鑰文件:
crt_key.pem
, 制作說明詳見:《openssl生成pyftpdlib啟用ftps所需文件》 - 上傳文件的根目錄:
/rootftp/
, 要自己新建好
范本代碼
# coding:utf-8
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import TLS_FTPHandler
from pyftpdlib.servers import FTPServer
def main():
# Instantiate a dummy authorizer for managing 'virtual' users
authorizer = DummyAuthorizer()
# Define a new user having full r/w permissions and a read-only
# anonymous user
authorizer.add_user('zhangsan', '12345678', '/', perm='elradfmwMT')
# Instantiate FTP handler class
handler = TLS_FTPHandler
handler.authorizer = authorizer
# Define a customized banner (string returned when client connects)
handler.banner = "pyftpdlib(xxxxxxxxxx) based ftpd ready."
# Specify a masquerade address and the range of ports to use for
# passive connections. Decomment in case you're behind a NAT.
handler.masquerade_address = '172.188.26.175'
handler.passive_ports = range(60000, 65535)
# ssl加密
# 導(dǎo)入private key + certification的pem文件(上半截是私鑰,下半截是證書)
handler.certfile = 'crt_key.pem'
# requires SSL for both control and data channel 啟用ssl加密傳輸
# handler.tls_control_required = True # 控制連接啟用ssl加密
# 我個人的感覺是,如果是開了這個控制連接加密,那么FTP刷新或者打開目錄時經(jīng)常要卡頓,卡的時間穩(wěn)定在21秒左右,提示的是[正在協(xié)商密碼],如果把這個控制連接加密關(guān)掉,速度就快多了.
handler.tls_data_required = True # 數(shù)據(jù)連接啟用ssl加密
# Instantiate FTP server class and listen on 0.0.0.0:2121
address = ('0.0.0.0', 2121)
server = FTPServer(address, handler)
# set a limit for connections
server.max_cons = 8
server.max_cons_per_ip = 8
# start ftp server
server.serve_forever()
if __name__ == '__main__':
main()
# nohup py -u ftp.py >> log 2>&1 &
需要自行修改的設(shè)置:
- 用戶名, 密碼, 路徑, 權(quán)限; 上面寫的是
'zhangsan', '12345678', '/', perm='elradfmwMT'
- 偽IP地址, 上面寫的是
172.188.26.175
- 端口號, 上面寫的是
2121
, 需要在安全組里放通該端口號