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

48

Dans le monde Ubuntu, il semble que vous utilisiez toujours un serveur FTP ou jamais . 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 que cela 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 Google Code qui crée assez bien une instance TFTP (en supposant qu'il fonctionne toujours - je ne l'ai pas utilisée depuis environ un an et Python a évolué), mais qu'en est-il de FTP? Quelque chose dehors là?

Scaine
la source
2
Dommage que je n'ai pas eu le temps de terminer JetFTP. Il fait exactement ce que vous décrivez et peut fonctionner sans privilèges root (vous devez utiliser un port> 1024 bien sûr). Il fonctionnera sans configuration et avec une belle interface graphique. Jetez un coup d’ œil à JetHTTP , dont la conception et l’interface sont similaires.
Nathan Osman
Merci George, je vais vérifier ça aussi. Peut-être que le meilleur des deux peut être combiné. Les premiers jours pour moi et le python cependant, alors je doute que je serai très utile là-bas!
Scaine

Réponses:

53

Avec pyftpdlib, vous pouvez obtenir un serveur FTP aussi simple qu'un un trois :

  1. Installer avec pip pip install --user pyftpdlib
  2. Exécutez avec python -m pyftpdlib, ajoutez -wsi vous voulez aussi 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 du répertoire FTPde travail actuel à la place de votre domicile. Tapez python ftpserver.py --helppour obtenir des informations sur toutes les options.

  • connectez-vous à anonymous@localhost:2121/

texte alternatif

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=USERNAMEet --password=PASSWORD:

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

Encore une fois, utilisez --helppour les voir tous.

Cela devrait être aussi simple que possible.


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

texte alternatif

  • 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 pyftpdlibet ftpserver.pychangé (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 <<<
...
Stefano Palazzo
la source
Cela ressemble à un superbe module - depuis que j'essaie d’apprendre le python, c’est un bon point de départ pour créer une interface graphique ... Je crains de ne pas indiquer cela comme la réponse (bien que Je l'ai voté) dans l'espoir que quelqu'un connaisse un outil déjà basé sur une interface graphique. Merci pour l'avertissement et merci pour la version modifiée.
Scaine
Merci :-) Je ne vais pas abandonner, en programmant une interface graphique pour cela maintenant. : P
Stefano Palazzo
1
Merci Stefano! Je ne m'attendais pas à ça! C’est formidable - non seulement une interface graphique à essayer (ce soir), mais aussi un peu de guide d’enseignement sur la façon dont vous l’avez combinée en premier lieu. Merci beaucoup!
Scaine
5
paste.ubuntu.com/542726 et paste.ubuntu.com/542852 sont morts, malheureusement ... également, ftpserver.py a changé, et apparemment, le message ci-dessus ne tient plus (la dernière révision autonome semble être r1116 , avec cette diff ). J'ai
modifié
1
Pour utiliser le script ci-dessus, vous devez installer la bibliothèque "pyftpdlib", le faire fonctionner ... "sudo apt-get install python-pip", puis "pip install pyftpdlib" ... et vous êtes tous ensemble!
D.Snap
1
  • Vous pouvez utiliser pure-ftpd Installez pure-ftpd

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

karthick87
la source
3
Les débutants peuvent installer un serveur Pure-FTPd en 5 minutes. Cela peut être aussi simple que d'installer le paquet, de taper «pure-ftpd &» et… c'est tout. Vous avez déjà un serveur en cours d'exécution et les clients peuvent commencer à se connecter.
hhlp
1
Oui, j’apprécie le fait que Pure soit facile, en particulier avec le paquet d’interface graphique pure-admin - je l’utilise pour mon serveur FTP permanent. Cependant, avec PureFTP, vous utilisez / toujours / FTP, ce qui constitue un risque pour la sécurité d’un ordinateur portable qui se connecte via WIFI. Je ne veux pas avoir à oublier d'activer mon pare-feu et de m'inquiéter des ressources (probablement minuscules) qu'il consomme. Je crains que scp ne soit généralement pas une option, même si certains périphériques s'améliorent. Je pense que les dernières images F5 utilisent scp, tout comme le gestionnaire d'appels de Cisco ces jours-ci.
Scaine
2
Je ne pense même pas que vous deviez lancer le démon PureFTP après avoir installé le paquet. (Je pensais que le postinstscript devait le lancer .)
Nathan Osman
0

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 à savoir 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

BO VESTERGAARD
la source
2
Merci Bo - J'avais déjà mentionné cet outil utile dans ma question. Cependant, je voulais quelque chose comme TFTPgui pour FTP, qui n’existait pas tant que Stefano n’a pas sorti son gabarit en python.
Scaine
pythons ftplib fonctionne bien à la place et il est beaucoup plus facile de script si on traite avec beaucoup de périphériques (1k +)
lxx