web-dev-qa-db-fra.com

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

Dans le monde d’Ubuntu, il semble que vous exécutiez toujours toujours un serveur FTP ou jamais faire. Je suis peut-être le premier analyste réseau à avoir besoin de flasher une image Cisco, Checkpoint ou Nokia avec Ubuntu ... J'ai besoin d'un serveur FTP pendant peut-être 5 minutes, rien de plus.

Je recherche un serveur FTP simple et initié par l'utilisateur. Je comprends qu’il devrait probablement fonctionner avec Sudo. C'est bien - mais je veux le démarrer/l'arrêter comme un programme normal.

Sur la plate-forme Windows, de tels outils sont à la pelle - j'ai utilisé 3CDaemon pendant des années et récemment découvert CoreFTP. Les deux sont excellents. Vous configurez un utilisateur, pointez-le sur un répertoire, puis cliquez sur le bouton "Démarrer". Quelques minutes plus tard, vous avez généralement terminé et vous appuyez sur le bouton "Arrêter". Travail accompli.

De tels outils ne semblent pas exister sur Ubuntu. J'ai trouvé un projet de code Google qui crée assez bien une instance TFTP (en supposant qu'elle fonctionne toujours - je ne l'ai pas utilisée depuis environ un an et python est passé), mais que diriez-vous de FTP? Quelque chose là-bas?

48
Scaine

Vous pouvez obtenir un serveur FTP aussi simple qu'un deux trois en utilisant pyftpdlib :

  1. Installer avec pip pip install --user pyftpdlib
  2. Exécutez-le avec python -m pyftpdlib, ajoutez -w si vous souhaitez également un accès en écriture.
  3. 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 FTPdans le répertoire de travail actuel à la place de votre répertoire personnel. Tapez python ftpserver.py --help pour obtenir des informations sur toutes les options.

  • connectez-vous à anonymous@localhost:2121/

alt text

Veuillez noter que ce logiciel est publié sous les termes de MIT License , ce qui signifie que vous pouvez faire ce que vous voulez, avec ce que vous voulez. Lisez le texte de la licence, ce n’est que quelques lignes et connaissez vos droits.


Désormais, 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 and --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:

alt text

  • 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 ce dernier ), 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 se soucie de rien. 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. ne pas définir un mot de passe ou quelque chose comme ça.


EDIT: puisque l'API de pyftpdlibet ftpserver.py a changé (et que les liens ubuntu Pastebin ont disparu); la plupart des postes ci-dessus ne fonctionnent plus. Pour la version (2014) de pyftpdlibname__, 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 <<<
...
51
Stefano Palazzo
  • Vous pouvez utiliser pure-ftpd Install pure-ftpd

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

1
karthick87

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

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

La seule chose à prendre en compte est que Ubunutu utilise par défaut Phython2. La meilleure façon de démarrer le script est la suivante:

Sudo python3 ./tftpgui.py

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

Bo

0
BO VESTERGAARD