Avec pyftpdlib, vous pouvez obtenir un serveur FTP aussi simple qu'un un trois :
- Installer avec pip
pip install --user pyftpdlib
- Exécutez avec
python -m pyftpdlib
, ajoutez -w
si vous voulez aussi un accès en écriture.
- il n'y a pas d'étape trois :)
Vous avez maintenant un serveur FTP auquel vous pouvez vous connecter pour partager anonymement votre répertoire personnel. Ceci est plus destiné à tester le module, mais il fait ce qu’il dit sur l’étain.
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 du répertoire FTP
de travail actuel à la place de votre domicile. Tapez python ftpserver.py --help
pour obtenir des informations sur toutes les options.
- connectez-vous à
anonymous@localhost:2121/
Veuillez noter que ce logiciel est publié sous les termes de la licence MIT , ce qui signifie que vous pouvez faire ce que vous voulez, en gros. Lisez le texte de la licence, ce n’est que quelques lignes et connaissez vos droits.
À présent, ce script ne prend pas en charge les nom d'utilisateur et 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 ligne de commande
--username=USERNAME
et --password=PASSWORD
:
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 aussi écrit un petit gui pour cela:
Téléchargez-le ici (mis à jour à la rév. 6)
Je suis désolé, il a 3999 lignes, mais il fera tout ce que l’original fait. Et je voulais tout garder dans un seul fichier. Lorsqu'il est démarré sans aucun paramètre (c'est-à-dire, exécutez-le et double-cliquez dessus, ou créez un programme de lancement pour celui-ci ), il lance un petit GUI pour vous permettre de configurer votre serveur. Vous pouvez toujours l'importer en tant que module python ou utiliser la ligne de commande ci-dessus, fu.
Problèmes connus:
Je ne me suis pas soucié de rien d'autre que du port 2121. Cela devrait être simple, rendre le port configurable nécessite une gestion d'erreur complexe que je ne veux pas que l'utilisateur s'embarrasse. 2121 devrait toujours fonctionner correctement.
Comme la ligne de commande, il ne vous avertira pas de l'utilisation d'une configuration non sécurisée. C'est-à-dire pas définir un mot de passe ou quelque chose comme ça.
EDIT: depuis l'API de pyftpdlib
et ftpserver.py
changé (et les liens de collerbin d'ubuntu ont disparu); la plupart des postes ci-dessus ne fonctionnent plus. Pour la version (2014) de pyftpdlib
, utilisez ce script ( ftpserver-cli.py
) pour obtenir le même résultat 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 <<<
...