Vous pouvez mettre en place un serveur FTP aussi facilement que un deux trois en utilisant pyftpdlib:
- Installez avec pip
pip install --user pyftpdlib
- Exécutez avec
python -m pyftpdlib
, ajoutez -w
si vous voulez également un accès en écriture.
- 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/
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:
-
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 <<<
...