Puede obtener un servidor FTP tan fácil como uno, dos, tres usando pyftpdlib :
- Instalar con pip
pip install --user pyftpdlib
- Ejecute con
python -m pyftpdlib
, agregue -w
si desea acceso de escritura también.
- no hay paso tres :)
Ahora tiene un servidor ftp en el que puede iniciar sesión para compartir anónimamente su directorio personal. Esto se entiende más como una prueba del módulo, pero hace lo que dice en la lata.
Este comando:
python -m pyftpdlib --directory=FTP --port=2121 --write
servirá, sin privilegios de root, en el puerto 2121 y otorgará acceso de escritura a usuarios anónimos. También usará el directorio FTP
en el directorio de trabajo actual en lugar de su hogar. Escriba python ftpserver.py --help
para obtener información sobre todas las opciones.
- iniciar sesión en
anonymous@localhost:2121/
Tenga en cuenta que este software se lanza bajo los términos de la Licencia MIT , lo que significa que puede hacer básicamente lo que quiera con él. Lea el texto de la licencia, son solo unas pocas líneas y conozca sus derechos.
Ahora, este script no admite nombre de usuario y contraseña como parte de su funcionalidad independiente (por razones de seguridad, imagino).
Entonces agregué esa característica:
Ahora tiene, además de todas las opciones que mencioné, los parámetros de la línea de comando
--username=USERNAME
y --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Nuevamente, utilícelo --help
para verlos a todos.
Esto debería ser tan fácil como sea posible.
También he escrito una pequeña gui para ello:
Descárguelo aquí (actualizado en la rev. 6)
Lo siento, tiene 3999 líneas de largo, pero hará todo lo que hace el original. Y quería mantenerlo todo en un archivo. Cuando se inicia sin ningún parámetro (es decir, hacerlo ejecutable y hacer doble clic en él, o crear un iniciador para él ), se inicia una pequeña interfaz gráfica de usuario para que pueda configurar su servidor. Todavía puede importarlo como un módulo de Python o usar la línea de comando anterior fu.
Problemas conocidos:
No me he molestado en otra cosa que no sea el puerto 2121. Esto debería ser simple, hacer que el puerto sea configurable requiere un manejo complejo de errores con el que no quiero que el usuario se moleste. 2121 siempre debería funcionar bien.
No le advertirá, como lo hace la línea de comando, sobre el uso de una configuración insegura. No estoy estableciendo una contraseña o algo así.
EDITAR: ya que la API de pyftpdlib
y ftpserver.py
cambió (y los enlaces de ubbin pastebin se han ido); La mayoría de las publicaciones anteriores ya no funcionan. Para la versión (2014) de pyftpdlib
, use este script ( ftpserver-cli.py
) para lograr lo mismo que arriba:
#!/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()
llamar 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 <<<
...