56 votes

Comment puis-je exécuter temporairement un serveur FTP?

Dans le monde d'Ubuntu, il semble que vous exécutiez toujours un serveur FTP ou que vous ne le fassiez jamais. Peut-être suis-je le premier analyste réseau qui ait besoin de flasher une image Cisco, Checkpoint ou Nokia en utilisant Ubuntu... J'ai besoin d'un serveur FTP pendant peut-être 5 minutes, pas plus que ça.

Je recherche un serveur FTP minimaliste, lancé par l'utilisateur. Je comprends qu'il devrait probablement fonctionner avec sudo. C'est bien - mais je veux le démarrer/arrêter comme un programme normal.

Sur la plateforme Windows, de tels outils se trouvent à foison - j'ai utilisé 3CDaemon pendant des années et j'ai récemment trouvé CoreFTP. Les deux sont excellents. Vous configurez un utilisateur, le dirigez vers un répertoire, puis appuyez sur le bouton "Démarrer". Quelques minutes plus tard, vous avez généralement terminé et appuyez sur le bouton "Arrêter". Travail terminé.

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

62voto

andybee Points 497

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

  1. Installez avec pip pip install --user pyftpdlib
  2. Exécutez avec python -m pyftpdlib, ajoutez -w si vous voulez également un accès en écriture.
  3. Il n'y a pas de troisième étape :)

Vous disposez maintenant d'un serveur ftp auquel vous pouvez vous connecter en mode anonyme en partageant votre répertoire Home. Cela est plutôt destiné à tester le module, mais ça fait ce qui est annoncé.

Cette commande:

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

servira, sans privilèges 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 Home. Tapez python ftpserver.py --help pour obtenir des informations sur toutes les options.

  • Connectez-vous à anonymous@localhost:2121/

texte alternatif

Veuillez noter que ce logiciel est distribué sous les termes de la Licence MIT, ce qui signifie que vous pouvez à peu près faire ce que vous voulez avec. Lisez le texte de la licence, ce ne sont que quelques lignes, et connaissez vos droits.


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

J'ai donc ajouté cette fonctionnalité:

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

--username=USERNAME et --password=MOTDEPASSE:

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

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

Cela devrait être aussi simple que possible.


J'ai également écrit une petite interface graphique pour cela:

texte alternatif

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

    Je regrette qu'elle fasse 3999 lignes, mais elle fera tout ce que fait l'original. Et je voulais tout maintenir dans un seul fichier. Lorsqu'elle est démarrée sans aucun paramètre (c'est-à-dire qu'elle est exécutable et double-cliquée, ou créez un lanceur pour cela), elle ouvre une petite interface graphique pour configurer votre serveur. Vous pouvez toujours l'importer en tant que module python ou utiliser le précédent fu en ligne de commande.

    Problèmes connus:

    • Je ne me suis pas embêté avec autre chose que le port 2121. Cela devrait être simple, rendre le port configurable nécessite une gestion d'erreur complexe avec laquelle je ne veux pas que l'utilisateur se préoccupe. 2121 devrait toujours fonctionner correctement.

    • Il ne vous préviendra pas, comme le fait la ligne de commande, si vous utilisez une configuration non sécurisée. Par exemple, ne pas définir de mot de passe ou quelque chose comme ça.


EDIT : étant donné que l'API de pyftpdlib et ftpserver.py a changé (et que les liens des paste de ubuntu sont disparus) ; la plupart du post ci-dessus ne fonctionne plus. Pour la version (2014) de pyftpdlib, utilisez ce script (ftpserver-cli.py) pour réaliser la même chose que ci-dessus:

#!/usr/bin/env python
# ftpserver-cli.py
import sys
sys.path.append("/chemin/vers/pyftpdlib-svn") # entrez votre chemin correct ici
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="utilisateur", help="nom d'utilisateur")
  optparser.add_argument('-p', '--password', action='store', type=str,
      default="12345", help="mot de passe")
  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("Utilisation: utilisateur: %s mot de passe: %s port: %d répertoire: %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()

appelé avec:

$ sudo python ftpserver-cli.py --directory=/tmp/srvtest
Utilisation: utilisateur: user mot de passe: 12345 port: 21 répertoire: /tmp/srvtest
[I 14-03-02 21:40:57] >>> démarrage du serveur FTP sur 127.0.0.1:21, pid=19286 <<<
...

2voto

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

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

0voto

BO VESTERGAARD Points 1

Pour ceux qui copient des fichiers de et vers des routeurs, vous voudrez peut-être essayer cet outil : tftpgui

Ça a marché pour moi et c'est très facile à configurer. C'est aussi un script Python mais qui utilise le tftp au lieu du 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'Ubuntu utilise python2 par défaut, donc la meilleure façon de lancer le script est :

sudo python3 ./tftpgui.py

Vous pouvez ensuite le configurer dans l'interface graphique. Quand vous avez fini, 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