56 votes

Comment faire fonctionner temporairement un serveur FTP ?

Dans le monde d'Ubuntu, il semble que vous devez soit toujours exécuter un serveur FTP ou vous jamais faire. Je suis peut-être le premier analyste réseau à avoir eu besoin de flasher une image Cisco, Checkpoint ou Nokia en utilisant Ubuntu... J'ai besoin d'un serveur FTP pour peut-être 5 minutes, pas plus.

Je suis à la recherche d'un serveur FTP de base, initié par l'utilisateur. Je comprends qu'il devra probablement fonctionner avec sudo. C'est bien - mais je veux le démarrer/arrêter comme un programme normal.

Sur la plate-forme Windows, de tels outils sont disponibles à la pelle. J'utilise 3CDaemon depuis des années et j'ai récemment découvert CoreFTP. Les deux sont excellents. Vous configurez un utilisateur, vous le dirigez vers un répertoire, puis vous appuyez sur le bouton "Démarrer". Quelques minutes plus tard, vous avez généralement terminé et vous appuyez sur le bouton "Stop". Le travail est terminé.

De tels outils ne semblent pas exister sur Ubuntu. J'ai trouvé un Projet Google Code qui crée une instance TFTP raisonnablement bien (en supposant qu'il fonctionne encore - je ne l'ai pas utilisé depuis environ un an et Python a évolué), mais qu'en est-il de FTP ? Y a-t-il quelque chose qui existe ?

62voto

andybee Points 497

Vous pouvez mettre en place un serveur FTP aussi facilement qu'un deux trois en utilisant pyftpdlib :

  1. Installer avec pip pip install --user pyftpdlib
  2. Exécuter avec python -m pyftpdlib , ajouter -w si vous voulez aussi un accès en écriture.
  3. il n'y a pas de troisième étape :)

Vous avez maintenant un serveur ftp auquel vous pouvez vous connecter de manière anonyme en partageant votre répertoire personnel. Il s'agit plus d'un test du module, mais il fait ce qu'il dit sur la boîte.

Cette commande :

python -m pyftpdlib --directory=FTP --port=2121 --write

servira, sans privilèges de root, sur le port 2121 et accordera un accès en écriture aux utilisateurs anonymes. Il utilisera également le répertoire FTP dans le répertoire de travail actuel au lieu de votre répertoire personnel. Tapez python ftpserver.py --help pour obtenir des informations sur toutes les options.

  • Connectez-vous à l'adresse suivante anonymous@localhost:2121/

alt text

Veuillez noter que ce logiciel est publié selon les termes de la loi sur la protection des données. Licence MIT ce qui signifie que vous pouvez en faire ce que vous voulez. Lisez le texte de la licence, il ne s'agit que de quelques lignes, et connaissez vos droits.


Maintenant, ce script ne supporte pas le nom d'utilisateur et le mot de passe dans le cadre de sa fonctionnalité autonome (pour des raisons de sécurité, j'imagine).

J'ai donc ajouté cette fonctionnalité :

Vous avez maintenant, en plus de toutes les options que j'ai mentionnées, les paramètres de la ligne de commande

--username=USERNAME y --password=PASSWORD :

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

Encore une fois, utilisez --help pour les voir tous.

Cela devrait être aussi facile que possible.


J'ai aussi écrit un petit gui pour cela :

alt text

  • Téléchargez-le ici (mis à jour à la rév. 6)

    Je suis désolé qu'il fasse 3999 lignes, mais il fera tout ce que l'original fait. Et je voulais garder tout ça dans un seul fichier. Lorsqu'il est lancé sans aucun paramètre (c'est-à-dire qu'il faut le rendre exécutable et le double-cliquer, ou bien créer un lanceur pour celui-ci ), il démarre un petit gui pour vous permettre de configurer votre serveur. Vous pouvez toujours l'importer comme un module Python ou utiliser la ligne de commande ci-dessus.

    Problèmes connus :

    • Je ne me suis pas occupé d'autre chose que du port 2121. Cela devrait être simple, rendre le port configurable nécessite une gestion complexe des erreurs dont je ne veux pas que l'utilisateur s'embarrasse. Le port 2121 devrait toujours fonctionner correctement.

    • Il ne vous avertira pas, comme le fait la ligne de commande, de l'utilisation d'une configuration non sécurisée. Par exemple, si vous ne définissez pas de mot de passe ou quelque chose du genre.


EDIT : depuis que l'API de pyftpdlib y ftpserver.py a changé (et les liens ubuntu pastebin ont disparu) ; la plupart du post ci-dessus ne fonctionne plus. Pour la version (2014) de pyftpdlib utilisez ce script ( ftpserver-cli.py ) pour obtenir la même chose que ci-dessus :

#!/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()

appeler avec :

$ 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 <<<
...

2voto

Rob Gray Points 1556
  • Vous pouvez utiliser pure-ftpd Install pure-ftpd

  • Vous pouvez utiliser scp si vous avez un serveur ssh.

0voto

BO VESTERGAARD Points 1

Pour ceux qui copient des fichiers vers et depuis des routeurs, vous pourriez vouloir essayer cet outil : tftpgui

Il a fonctionné pour moi et est très facile à configurer. C'est aussi un script Python mais fait tftp au lieu de ftp. Tout ce que vous avez à faire est d'installer Python-tk et de télécharger le script.

La seule chose à savoir est qu'Ubunutu utilise par défaut Phython2, donc la meilleure façon de lancer le script est :

sudo python3 ./tftpgui.py

Vous pouvez ensuite le configurer dans l'interface graphique. Lorsque vous avez terminé, appuyez sur exit et c'est tout.

Bo

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X