Wie betreibe ich vorübergehend einen FTP-Server?

48

In der Welt von Ubuntu scheint es, dass Sie entweder immer einen FTP-Server betreiben oder nie . Vielleicht bin ich der erste Netzwerkanalyst, der ein Cisco-, Checkpoint- oder Nokia-Image mit Ubuntu flashen muss ... Ich brauche einen FTP-Server für vielleicht 5 Minuten, nicht mehr.

Ich suche einen einfachen, benutzerinitiierten FTP-Server. Ich verstehe, dass es wahrscheinlich mit sudo laufen müsste. Das ist in Ordnung - aber ich möchte es wie ein normales Programm starten / stoppen.

Auf der Windows-Plattform sind solche Tools ein Dutzend - ich habe 3CDaemon jahrelang verwendet und kürzlich CoreFTP gefunden. Beide sind hervorragend. Sie konfigurieren einen Benutzer, zeigen auf ein Verzeichnis und klicken dann auf die Schaltfläche "Start". Ein paar Minuten später sind Sie im Allgemeinen fertig und klicken auf die Schaltfläche "Stopp". Job erledigt.

Solche Tools scheinen auf Ubuntu nicht zu existieren. Ich habe ein Google Code-Projekt gefunden , das eine TFTP-Instanz recht gut erstellt (vorausgesetzt, es läuft noch - ich habe es seit ungefähr einem Jahr nicht mehr verwendet und Python ist weitergegangen), aber wie steht es mit FTP? Irgendwas da draußen?

Scaine
quelle
2
Schade, dass ich keine Zeit hatte, JetFTP zu beenden. Es macht genau das , was Sie beschreiben, und es kann ohne Root-Rechte ausgeführt werden (Sie müssten natürlich einen Port> 1024 verwenden). Es wird ohne Konfiguration und mit einer netten GUI sofort einsatzbereit sein. Schauen Sie sich JetHTTP an , das in Design und Oberfläche ähnlich ist, um eine Vorstellung davon zu bekommen, wie es aussehen wird.
Nathan Osman
Danke George, ich werde das auch überprüfen. Vielleicht kann das Beste von beiden kombiniert werden. Frühe Tage für mich und Python, also bezweifle ich, dass ich da viel Hilfe sein werde!
Scaine

Antworten:

52

Mit pyftpdlib können Sie einen FTP-Server so einfach wie einen Zwei-Drei-Server einrichten :

  1. Mit Pip installieren pip install --user pyftpdlib
  2. Ausführen mit python -m pyftpdlib, Hinzufügen, -wwenn Sie auch Schreibzugriff wünschen.
  3. es gibt keinen Schritt drei :)

Sie haben jetzt einen FTP-Server, auf dem Sie sich anmelden können, um anonym Ihr Home-Verzeichnis freizugeben. Dies ist eher als Test des Moduls gedacht, aber es macht das, was es verspricht.

Dieser Befehl:

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

wird ohne Root-Rechte auf Port 2121 bereitgestellt und anonymen Benutzern Schreibzugriff gewährt. Es wird auch das Verzeichnis FTPim aktuellen Arbeitsverzeichnis anstelle Ihres Heimverzeichnisses verwendet. Geben Sie ein python ftpserver.py --help, um Informationen zu allen Optionen zu erhalten.

  • Loggen Sie sich ein bei anonymous@localhost:2121/

Alt-Text

Bitte beachten Sie, dass diese Software unter den Bedingungen der MIT-Lizenz veröffentlicht wird. Dies bedeutet, dass Sie grundsätzlich alles tun können, was Sie möchten. Lesen Sie den Lizenztext, es sind nur ein paar Zeilen, und kennen Sie Ihre Rechte.


Dieses Skript unterstützt Benutzernamen und Passwort nicht als Teil seiner eigenständigen Funktionalität (aus Sicherheitsgründen, wie ich es mir vorstelle).

Also habe ich diese Funktion hinzugefügt:

Sie haben jetzt zusätzlich zu allen Optionen, die ich erwähnt habe, die Befehlszeilenparameter

--username=USERNAMEund --password=PASSWORD:

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

Wieder verwenden --help, um sie alle zu sehen.

Dies sollte so einfach wie möglich sein.


Ich habe auch ein kleines GUI dafür geschrieben:

Alt-Text

  • Laden Sie es hier herunter (aktualisiert bei Rev. 6)

    Es tut mir leid, dass es 3999 Zeilen lang ist, aber es wird alles tun, was das Original tut. Und ich wollte alles in einer Datei behalten. Wenn es ohne Parameter gestartet wird (dh es ausführbar machen und darauf doppelklicken oder einen Starter dafür erstellen ), wird eine kleine Benutzeroberfläche zum Konfigurieren des Servers gestartet . Sie können es weiterhin als Python-Modul importieren oder die obige Befehlszeile fu verwenden.

    Bekannte Probleme:

    • Ich habe mich mit nichts anderem als Port 2121 beschäftigt. Dies sollte einfach sein. Um den Port konfigurierbar zu machen, ist eine komplexe Fehlerbehandlung erforderlich, mit der sich der Benutzer nicht befassen soll. 2121 sollte immer gut funktionieren.

    • Sie werden nicht wie in der Befehlszeile vor der Verwendung einer unsicheren Konfiguration gewarnt. Dh kein Passwort setzen oder so.


BEARBEITEN: seit die API von pyftpdlibund ftpserver.pygeändert wurde (und die Ubuntu-Pastebin-Links weg sind); Die meisten der oben genannten Beiträge funktionieren nicht mehr. pyftpdlibVerwenden Sie für die (2014) -Version von dieses Skript ( ftpserver-cli.py), um dasselbe wie oben zu erreichen:

#!/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()

anrufen mit:

$ 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
quelle
Das sieht nach einem großartigen Modul aus - da ich Python lernen möchte, scheint dies ein guter Ausgangspunkt für das Erstellen einer GUI zu sein ... Ich befürchte, dass ich dies nicht als Antwort markiere (obwohl ich es nicht getan habe) habe es upvoted) in der hoffnung, dass jemand ein tool kennt, das bereits GUI-basiert ist. Danke für die Hinweise und danke für die modifizierte Version.
Scaine
Danke :-) Ich werde nicht aufgeben, eine GUI dafür zu programmieren. : P
Stefano Palazzo
1
Danke Stefano! Das hätte ich nie erwartet! Dies ist großartig - nicht nur eine GUI zum Ausprobieren (heute Abend), sondern auch eine Art Leitfaden dafür, wie Sie sie zusammengeschraubt haben. Danke vielmals!
Scaine
5
paste.ubuntu.com/542726 und paste.ubuntu.com/542852 tot ist, leider ... auch, ftpserver.py geändert, und anscheinend die oben genannte Post hält nicht mehr (letzte Standalone - Version scheint zu sein , r1116 mit diesem, diff ). Ich habe den Beitrag mit einem neuen Skript bearbeitet (wird bis zur Überprüfung durch
Fachkollegen
1
nur für die noob da draußen, um das obige Skript zu verwenden, müssen Sie die Bibliothek "pyftpdlib" installieren, ausführen ... "sudo apt-get install python-pip" und dann "pip install pyftpdlib" ... und Sie alle setzen!
D. Snap
1
karthick87
quelle
3
Anfänger können einen Pure-FTPd-Server in 5 Minuten installieren. Es kann so einfach sein, wie das Paket zu installieren, "pure-ftpd &" einzugeben und ... das ist alles. Sie haben bereits einen laufenden Server und Clients können mit der Verbindung beginnen.
HLP
1
Ja, ich schätze, dass Pure einfach ist, besonders mit dem Pure-Admin-GUI-Paket - ich verwende es für meinen permanenten FTP-Server. Bei PureFTP wird jedoch / immer / FTP ausgeführt. Dies ist ein Sicherheitsrisiko bei einem Laptop, der über WIFI eine Verbindung herstellt. Ich möchte nicht daran denken müssen, meine Firewall einzuschalten und mir Gedanken über die (wahrscheinlich winzigen) Ressourcen zu machen, die sie verbraucht. Ich befürchte, dass scp normalerweise keine Option ist, obwohl einige Geräte besser werden. Ich denke, die neuesten F5-Images verwenden scp, ebenso wie der Call Manager von Cisco in diesen Tagen.
Scaine
2
Ich glaube nicht einmal, dass Sie den PureFTP-Daemon nach der Installation des Pakets starten müssen. (Ich dachte, es sollte durch das postinstSkript im Paket gestartet werden .)
Nathan Osman
0

Für diejenigen, die Dateien auf und von Routern kopieren, empfiehlt sich das Tool tftpgui

Es hat bei mir funktioniert und ist sehr einfach zu konfigurieren. Es ist auch ein Python-Skript, das jedoch tftp anstelle von ftp ausführt. Alles was Sie tun müssen, ist python-tk zu installieren und das Skript herunterzuladen

Das einzige, was Sie beachten sollten, ist, dass Ubunutu standardmäßig Phython2 verwendet. Der beste Weg, um das Skript zu starten, ist:

sudo python3 ./tftpgui.py

Sie können es dann in der GUI konfigurieren. Wenn Sie fertig sind, drücken Sie exit und das ist es.

Bo

BO VESTERGAARD
quelle
2
Danke Bo - ich hatte dieses nützliche Tool bereits in meiner Frage erwähnt. Ich wollte jedoch so etwas wie TFTPgui für FTP, das es nicht gab, bis Stefano seine Python-Gui kaputtmachte.
Scaine
Pythons ftplib funktioniert stattdessen gut und ist viel einfacher zu skripten, wenn es um viele Geräte geht (1k +)
lxx