¿Cómo ejecuto temporalmente un servidor FTP?

48

En el mundo de Ubuntu, parece que siempre ejecutas un servidor FTP o nunca lo haces. Tal vez soy el primer analista de red que necesita flashear una imagen de Cisco, Checkpoint o Nokia usando Ubuntu ... Necesito un servidor FTP durante unos 5 minutos, nada más que eso.

Estoy buscando un servidor FTP básico, iniciado por el usuario. Entiendo que probablemente tendría que correr con sudo. Eso está bien, pero quiero iniciarlo / detenerlo como un programa normal.

En la plataforma de Windows, estas herramientas son una moneda de diez centavos por docena: he usado 3CDaemon durante años y recientemente encontré CoreFTP. Ambos son excelentes Usted configura un usuario, lo apunta a un directorio, luego presiona el botón "Inicio". Un par de minutos más tarde, generalmente ya terminaste y presionaste el botón "Parar". Trabajo hecho.

Tales herramientas no parecen existir en Ubuntu. Encontré un proyecto de Google Code que crea una instancia TFTP razonablemente bien (suponiendo que todavía se ejecute, no lo he usado en aproximadamente un año y Python se ha movido), pero ¿qué tal FTP? ¿Hay algo por ahí?

Scaine
fuente
2
Lástima que no he tenido tiempo de terminar JetFTP. Hace exactamente lo que usted describe, y puede ejecutarse sin privilegios de root (tendría que usar un puerto> 1024, por supuesto). Se ejecutará de fábrica sin configuración y con una buena GUI también. Para tener una idea de cómo será, consulte JetHTTP , que es similar en diseño e interfaz.
Nathan Osman
Gracias George, también lo comprobaré. Quizás lo mejor de ambos se puede combinar. Sin embargo, los primeros días para mí y Python, así que dudo que sea de mucha ayuda.
Scaine

Respuestas:

53

Puede obtener un servidor FTP tan fácil como uno, dos, tres usando pyftpdlib :

  1. Instalar con pip pip install --user pyftpdlib
  2. Ejecute con python -m pyftpdlib, agregue -wsi desea acceso de escritura también.
  3. 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 FTPen el directorio de trabajo actual en lugar de su hogar. Escriba python ftpserver.py --helppara obtener información sobre todas las opciones.

  • iniciar sesión en anonymous@localhost:2121/

texto alternativo

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=USERNAMEy --password=PASSWORD:

python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j

Nuevamente, utilícelo --helppara verlos a todos.

Esto debería ser tan fácil como sea posible.


También he escrito una pequeña gui para ello:

texto alternativo

  • 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 pyftpdliby ftpserver.pycambió (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 <<<
...
Stefano Palazzo
fuente
Esto parece un excelente módulo, ya que estoy tratando de aprender Python, parece que este es un gran punto de partida para construir una GUI ... Me temo que no estoy marcando esto como la respuesta (aunque yo lo he votado) con la esperanza de que alguien conozca una herramienta que ya esté basada en GUI. Sin embargo, gracias por la información sobre esto y gracias por la versión modificada.
Scaine
Gracias :-) No me rendiré, programando una GUI para ello ahora. : P
Stefano Palazzo
1
Gracias Stefano! ¡Nunca me lo esperaba! Esto es genial, no solo una GUI para probar (esta noche), sino también una pequeña guía de enseñanza sobre cómo lo unieron en primer lugar. ¡Muchas gracias!
Scaine
55
paste.ubuntu.com/542726 y paste.ubuntu.com/542852 están muertos, desafortunadamente ... también, ftpserver.py cambió, y aparentemente la publicación anterior ya no se sostiene (la última revisión independiente parece ser r1116 , con esto diff ) He realizado una edición en la publicación con un nuevo script (será invisible hasta la revisión por pares)
sdaau
1
solo para el novato, para usar el script anterior necesitará instalar la biblioteca "pyftpdlib", para ejecutarlo ... "sudo apt-get install python-pip" y luego "pip install pyftpdlib" ... y todo listo!
D.Snap
1
  • Puedes usar pure-ftpd Instalar ftpd puro

  • Puede usar scp si tiene un servidor ssh.

karthick87
fuente
3
Los principiantes pueden instalar un servidor Pure-FTPd en 5 minutos. Puede ser tan simple como instalar el paquete, escribir "pure-ftpd &" y ... eso es todo. Ya tiene un servidor en ejecución y los clientes pueden comenzar a conectarse.
hhlp
1
Sí, agradezco que Pure sea fácil, especialmente con el paquete gui pure-admin: lo uso para mi servidor FTP permanente. Sin embargo, con PureFTP, estás / siempre / ejecutas FTP, lo cual es un riesgo de seguridad con una computadora portátil que se conecta a través de WIFI. No quiero tener que recordar encender mi firewall y preocuparme por los recursos (probablemente pequeños) que consume. Me temo que scp no suele ser una opción, aunque algunos dispositivos están mejorando; creo que las últimas imágenes F5 usan scp, al igual que el Administrador de llamadas de Cisco en estos días.
Scaine
2
Ni siquiera creo que necesite iniciar el demonio PureFTP después de instalar el paquete. (Pensé que se suponía que debía ser iniciado por el postinstguión en el paquete.)
Nathan Osman
0

Para aquellos que copian archivos ay desde enrutadores, puede probar esta herramienta: tftpgui

Funcionó para mí y es muy fácil de configurar. También es un script de Python pero hace tftp en lugar de ftp. Todo lo que tienes que hacer es instalar python-tk y descargar el script

Lo único que debe tener en cuenta es que Ubunutu está predeterminado en Phython2, por lo que la mejor manera de iniciar el script es:

sudo python3 ./tftpgui.py

Luego puede configurarlo en la GUI. cuando haya terminado, presione salir y eso es todo.

Bo

BO VESTERGAARD
fuente
2
Gracias Bo: ya había mencionado esa herramienta útil en mi pregunta. Sin embargo, quería algo como TFTPgui para FTP, que no existía hasta que Stefano activó su interfaz gráfica de usuario de Python.
Scaine
Pythons ftplib funciona bien en su lugar y es mucho más fácil de escribir si se trata de muchos dispositivos (1k +)
lxx