Command line usage
Pyftpdlib can also be run as a simple stand-alone server from the command line. This is useful when you want to quickly share a directory. Here’s some examples.
Anonymous server, listening on port 2121, sharing the current directory:
$ python3 -m pyftpdlib
[I 13-04-09 17:55:18] >>> starting FTP server on 0.0.0.0:2121, pid=6412 <<<
[I 13-04-09 17:55:18] poller: <class 'pyftpdlib.ioloop.Epoll'>
[I 13-04-09 17:55:18] masquerade (NAT) address: None
[I 13-04-09 17:55:18] passive ports: None
[I 13-04-09 17:55:18] use sendfile(2): True
Anonymous server with write permission:
$ python3 -m pyftpdlib --write
Specify a user with write permissions:
$ python3 -m pyftpdlib --username=bob --password=mypassword
Set a different address/port and home directory:
$ python3 -m pyftpdlib --interface=localhost --port=2121 --directory=/home/bob
Start a FTPS (FTP over SSL) server:
$ openssl req -x509 -newkey rsa:2048 -keyout ftpd.key -out ftpd.crt -nodes
$ python3 -m pyftpdlib --tls --keyfile=ftpd.key --certfile=ftpd.crt
See python3 -m pyftpdlib -h for a complete list of options:
$ python3 -m pyftpdlib -h
usage: python3 -m pyftpdlib [options]
Start a standalone anonymous FTP server.
Options:
-h, --help
show this help message and exit
Main options:
-i, --interface ADDRESS
specify the interface to run on (default: all interfaces)
-p, --port PORT
specify port number to run on (default: 2121)
-w, --write
grants write access for logged in user (default: read-only)
-d, --directory PATH
specify the directory to share (default: current directory)
-n, --nat-address ADDRESS
the NAT address to use for passive connections
-r, --range FROM-TO
the range of TCP ports to use for passive connections (e.g. -r 8000-9000)
-D, --debug
enable DEBUG logging level
-u, --username USERNAME
specify username to login with (anonymous login will be disabled and password required if supplied)
-P, --password PASSWORD
specify a password to login with (username required to be useful)
--concurrency CONCURRENCY
the FTP server concurrency model to use, either 'async' (default), 'pre-fork', 'multi-thread' or 'multi-proc'
Tls options:
--tls whether to enable FTPS (FTP over TLS); requires --keyfile and --certfile args
--keyfile PATH
the TLS key file
--certfile PATH
the TLS certificate file
--tls-control-required
impose TLS for the control connection (before login)
--tls-data-required
impose TLS for data connection
Other options:
--timeout TIMEOUT
connection timeout (default: 300 seconds)
--banner BANNER
the message sent when client connects (default: 'pyftpdlib 2.1.0 ready.')
--permit-foreign-addresses
allow data connections from an IP address different than the control connection
--permit-privileged-ports
allow data connections (PORT) over privileged TCP ports
--encoding ENCODING
the encoding used for client / server communication (default: utf8)
--use-localtime
display directory listings with the time in your local time zone (default: use GMT)
--disable-sendfile
disable sendfile() syscall, used for faster file transfers
--max-cons MAX_CONS
max number of simultaneous connections (default: 512)
--max-cons-per-ip MAX_CONS_PER_IP
maximum number connections from the same IP address (default: unlimited)
--max-login-attempts MAX_LOGIN_ATTEMPTS
max number of failed authentications before disconnect (default: 3)