基于pyftpdlib的简单ftp+ssl服务器文件范本

关于pyftpdlib建立 FTP服务器的详细内容:
py-FTP服务器之一:虚拟运行环境
py-FTP服务器之二:用户配置文件
py-FTP服务器之三:启用SSL连接
py-FTP服务器之四:ftp主程序
py-FTP服务器之五:其他

主要需求

  • 简单, 文件少, 建立快速
  • 用户少, 最好只有一个, 就是用来自己传文件的
  • 开启ssl加密
  • 开启被动模式

环境要求

  • 建议在虚拟环境中建立
  • 安装模块pyftpdlibpyopenssl

文件结构

  • 主文件: 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加密
    # 导入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刷新或者打开目录时经常要卡顿,卡的时间稳定在21秒左右,提示的是[正在协商密码],如果把这个控制连接加密关掉,速度就快多了.
    handler.tls_data_required = True  # 数据连接启用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 &


需要自行修改的设置:

  1. 用户名, 密码, 路径, 权限; 上面写的是'zhangsan', '12345678', '/', perm='elradfmwMT'
  2. 伪IP地址, 上面写的是172.188.26.175
  3. 端口号, 上面写的是2121, 需要在安全组里放通该端口号

你可能感兴趣的:(基于pyftpdlib的简单ftp+ssl服务器文件范本)