È possibile far funzionare un server FTP con la stessa facilità di uno due tre usando pyftpdlib :
- Installa con pip
pip install --user pyftpdlib
- Esegui con
python -m pyftpdlib
, aggiungi -w
se vuoi anche l'accesso in scrittura.
- non c'è nessun passaggio tre :)
Ora hai un server ftp al quale puoi accedere per condividere in modo anonimo la tua home directory. Questo è inteso più come un test del modulo, ma fa quello che dice sulla scatola.
Questo comando:
python -m pyftpdlib --directory=FTP --port=2121 --write
servirà, senza privilegi di root, sulla porta 2121 e garantirà l'accesso in scrittura a utenti anonimi. Utilizzerà anche la directory FTP
nella directory di lavoro corrente anziché a casa tua. Digitare python ftpserver.py --help
per ottenere informazioni su tutte le opzioni.
- accedi a
anonymous@localhost:2121/
Si noti che questo software è rilasciato in base ai termini della Licenza MIT , il che significa che è possibile fare praticamente tutto ciò che si desidera con esso. Leggi il testo della licenza, sono solo poche righe e conosci i tuoi diritti.
Ora, questo script non supporta nome utente e password come parte della sua funzionalità autonoma (per motivi di sicurezza immagino).
Quindi ho aggiunto quella funzione:
Ora hai, oltre a tutte le opzioni che ho citato, i parametri della riga di comando
--username=USERNAME
e --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Ancora una volta, usa --help
per vederli tutti.
Questo dovrebbe essere facile come si arriva.
Ho anche scritto una piccola GUI per questo:
Scaricalo qui (aggiornato alla rev.6)
Mi dispiace è lungo 3999 righe, ma farà tutto ciò che fa l'originale. E volevo tenere tutto in un unico file. Quando viene avviato senza alcun parametro (ovvero rendilo eseguibile e fai doppio clic su di esso o crea un programma di avvio per esso ), avvia una piccola interfaccia per configurare il tuo server. Puoi comunque importarlo come modulo Python o usare la fu della riga di comando sopra.
Problemi noti:
Non mi sono preoccupato di nient'altro che la porta 2121. Questo dovrebbe essere semplice, rendere la porta configurabile richiede una complessa gestione degli errori che non voglio che l'utente si preoccupi. 2121 dovrebbe sempre funzionare bene.
Non ti avvertirà, come fa la riga di comando, sull'uso di una configurazione non sicura. Non sto impostando una password o qualcosa del genere.
EDIT: poiché l'API di pyftpdlib
e ftpserver.py
cambiato (ei collegamenti Ubbin Pasbin sono spariti); la maggior parte dei post sopra non funziona più. Per la versione (2014) di pyftpdlib
, utilizzare questo script ( ftpserver-cli.py
) per ottenere lo stesso come sopra:
#!/usr/bin/env python
# ftpserver-cli.py
import sys
sys.path.append("/path/to/pyftpdlib-svn") # enter your proper path here
import argparse
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def processCmdLineOptions():
global optparser
optparser = argparse.ArgumentParser(description="ftpserver-cli",
formatter_class=argparse.RawDescriptionHelpFormatter)
optparser.add_argument('-u', '--username', action='store', type=str,
default="user", help="username")
optparser.add_argument('-p', '--password', action='store', type=str,
default="12345", help="password")
optparser.add_argument('-t', '--port', action='store', type=int,
default="21", help="port")
optparser.add_argument('-d', '--directory', action='store', type=str,
default="/home/stefano/Projekte/", help="port")
optargs = optparser.parse_args(sys.argv[1:]) #(sys.argv)
return optargs
optargs = processCmdLineOptions()
print("Using: user: %s pass: %s port: %d dir: %s" % (optargs.username, optargs.password, optargs.port, optargs.directory))
authorizer = DummyAuthorizer()
authorizer.add_user(optargs.username, optargs.password, optargs.directory, perm="elradfmw")
#authorizer.add_anonymous("/home/nobody")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(("127.0.0.1", optargs.port), handler)
server.serve_forever()
chiama con:
$ sudo python ftpserver-cli.py --directory=/tmp/srvtest
Using: user: user pass: 12345 port: 21 dir: /tmp/srvtest
[I 14-03-02 21:40:57] >>> starting FTP server on 127.0.0.1:21, pid=19286 <<<
...