Jak tymczasowo uruchomić serwer FTP?

48

W świecie Ubuntu wydaje się, że albo zawsze uruchamiasz serwer FTP, albo nigdy tego nie robisz. Być może jestem pierwszym analitykiem sieci, który chce sflashować obraz Cisco, Checkpoint lub Nokia za pomocą Ubuntu ... Potrzebuję serwera FTP na około 5 minut, nie więcej.

Szukam serwera FTP zainicjowanego przez użytkownika. Rozumiem, że prawdopodobnie będzie musiał działać z sudo. W porządku - ale chcę go uruchomić / zatrzymać jak normalny program.

Na platformie Windows takie narzędzia to kilkanaście groszy - od lat korzystam z 3CDaemon i ostatnio znalazłem CoreFTP. Oba są doskonałe. Skonfiguruj użytkownika, skieruj go na katalog, a następnie naciśnij przycisk „Start”. Kilka minut później generalnie skończyłeś i naciskasz przycisk „Stop”. Zadanie wykonane.

Wydaje się, że takie narzędzia nie istnieją na Ubuntu. Znalazłem projekt Google Code, który dość dobrze tworzy instancję TFTP (zakładając, że nadal działa - nie korzystałem z niej przez około rok, a Python się uruchomił), ale co z FTP? Coś tam jest?

Scaine
źródło
2
Szkoda, że ​​nie miałem czasu dokończyć JetFTP. Robi dokładnie to , co opisujesz i może działać bez uprawnień roota (musiałbyś oczywiście użyć portu> 1024). Będzie działać po wyjęciu z pudełka bez konfiguracji i z ładnym GUI. Aby dowiedzieć się, jak to będzie, sprawdź JetHTTP , który ma podobny wygląd i interfejs.
Nathan Osman,
Dzięki George, też to sprawdzę. Być może najlepsze z obu można połączyć. Wczesne dni dla mnie i pytona, więc wątpię, że będę w tym bardzo pomoc!
Scaine,

Odpowiedzi:

52

Za pomocą pyftpdlib możesz uzyskać serwer FTP tak łatwy jak jeden dwa trzy :

  1. Zainstaluj za pomocą pip pip install --user pyftpdlib
  2. Uruchom z python -m pyftpdlib, dodaj, -wjeśli chcesz również dostęp do zapisu.
  3. nie ma kroku trzeciego :)

Masz teraz serwer ftp, który możesz zalogować się, aby anonimowo udostępnić swój katalog domowy. Jest to raczej test modułu, ale robi to, co mówi na puszce.

To polecenie:

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

będzie obsługiwał, bez uprawnień roota, port 2121 i zapewni dostęp do zapisu anonimowym użytkownikom. Będzie także używał katalogu FTPw bieżącym katalogu roboczym zamiast twojego domu. Wpisz, python ftpserver.py --helpaby uzyskać informacje o wszystkich opcjach.

  • zaloguj się na anonymous@localhost:2121/

alternatywny tekst

Należy pamiętać, że to oprogramowanie jest wydawane na warunkach licencji MIT , co oznacza, że ​​możesz robić w zasadzie, co tylko chcesz. Przeczytaj tekst licencji, to tylko kilka wierszy i poznaj swoje prawa.


Teraz ten skrypt nie obsługuje nazwy użytkownika i hasła w ramach jego samodzielnej funkcjonalności (wydaje mi się, że ze względów bezpieczeństwa).

Więc dodałem tę funkcję:

Oprócz wszystkich wymienionych powyżej opcji masz teraz parametry wiersza polecenia

--username=USERNAMEi --password=PASSWORD:

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

Ponownie użyj, --helpaby zobaczyć je wszystkie.

To powinno być tak proste, jak to możliwe.


Napisałem też dla niego trochę GUI:

alternatywny tekst

  • Pobierz go tutaj (zaktualizowano w wersji 6)

    Przepraszam, że ma 3999 linii, ale zrobi wszystko, co robi oryginał. I chciałem zachować to wszystko w jednym pliku. Kiedy zostanie uruchomiony bez żadnych parametrów (tj. Sprawi, że będzie wykonywalny i kliknie go dwukrotnie, lub utworzy dla niego program uruchamiający ), uruchomi małe GUI do skonfigurowania serwera. Nadal możesz go zaimportować jako moduł python lub użyć powyższego wiersza polecenia fu.

    Znane problemy:

    • Nie przejmowałem się niczym innym niż portem 2121. To powinno być proste, konfigurowanie portu wymaga złożonej obsługi błędów, z którymi nie chcę się przejmować. 2121 powinien zawsze działać dobrze.

    • Nie ostrzega cię, podobnie jak w wierszu poleceń, o używaniu niepewnej konfiguracji. Nie ustawiam hasła ani czegoś takiego.


EDYCJA: od momentu zmiany interfejsu API pyftpdlibi ftpserver.pyzmiany (i brakuje łączy pastebin ubuntu); większość powyższego postu już nie działa. W przypadku wersji (2014) pyftpdlibużyj tego skryptu ( ftpserver-cli.py), aby osiągnąć to samo, co powyżej:

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

Zadzwoń z:

$ 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
źródło
Wygląda to na świetny moduł - ponieważ próbuję nauczyć się Pythona, wygląda na to, że jest to świetny punkt wyjścia do zbudowania GUI ... Obawiam się, że nie oznaczam tego jako odpowiedzi (chociaż ja oceniłem to) w nadziei, że ktoś wie o narzędziu, które jest już oparte na GUI. Dziękuję za informacje na ten temat i dzięki za zmodyfikowaną wersję.
Scaine,
Dzięki :-) Nie poddam się, programuję teraz GUI. : P
Stefano Palazzo
1
Dzięki Stefano! Nigdy się tego nie spodziewałem! To jest świetne - nie tylko GUI do wypróbowania (dziś wieczorem), ale także trochę poradnika, w jaki sposób udało ci się go połączyć. Wielkie dzięki!
Scaine,
5
paste.ubuntu.com/542726 i paste.ubuntu.com/542852 są martwe, niestety ... także ftpserver.py zmienił się, i najwyraźniej powyższy post już się nie utrzymuje (ostatnia samodzielna wersja wydaje się być r1116 , z tym diff ). Wprowadziłem edycję wpisu za pomocą nowego skryptu (będzie niewidoczny do czasu recenzji)
sdaau
1
tylko dla nooba, aby użyć powyższego skryptu, musisz zainstalować bibliotekę „pyftpdlib”, aby to uruchomić ... sudo apt-get install python-pip ”, a następnie„ pip install pyftpdlib ”... i wszystko gotowe!
D.Snap
1
  • Możesz użyć pure-ftpd Zainstaluj pure-ftpd

  • Możesz użyć scp, jeśli masz serwer ssh.

karthick87
źródło
3
Początkujący mogą zainstalować serwer Pure-FTPd w 5 minut. Może to być tak proste, jak instalacja pakietu, wpisanie „pure-ftpd &” i… to wszystko. Masz już uruchomiony serwer, a klienci mogą zacząć się łączyć.
hhlp,
1
Tak, doceniam to, że Pure jest łatwe, szczególnie z pakietem GUI czysto administracyjnym - używam go do mojego stałego serwera FTP. Jednak dzięki PureFTP masz / zawsze / używasz FTP, co stanowi zagrożenie dla bezpieczeństwa w przypadku laptopa podłączonego przez WIFI. Nie chcę pamiętać, aby włączyć zaporę i martwić się (prawdopodobnie niewielkimi) zasobami, które zużywa. Obawiam się, że scp zwykle nie wchodzi w grę, chociaż niektóre urządzenia są coraz lepsze - myślę, że najnowsze obrazy F5 używają scp, podobnie jak obecnie Call Manager firmy Cisco.
Scaine,
2
Nawet nie sądzę, że musisz uruchomić demona PureFTP po zainstalowaniu pakietu. (Myślałem, że powinien go uruchomić postinstskrypt w pakiecie.)
Nathan Osman,
0

Dla tych, którzy kopiują pliki do iz routerów, możesz wypróbować to narzędzie: tftpgui

To działało dla mnie i jest bardzo łatwe do skonfigurowania. Jest to również skrypt w języku Python, ale robi tftp zamiast ftp. Wszystko, co musisz zrobić, to zainstalować python-tk i pobrać skrypt

Jedyną rzeczą, o której należy pamiętać, jest to, że Ubunutu ma domyślnie Phython2, więc najlepszym sposobem na uruchomienie skryptu jest:

sudo python3 ./tftpgui.py

Następnie możesz go skonfigurować w GUI. kiedy skończysz, naciśnij exit i to wszystko.

Bo

BO VESTERGAARD
źródło
2
Dzięki Bo - wspomniałem już o tym przydatnym narzędziu w moim pytaniu. Chciałem jednak czegoś takiego jak TFTPgui dla FTP, który nie istniał, dopóki Stefano nie podrzucił swojego GUI Pythona.
Scaine
pytony ftplib zamiast tego działają dobrze i są o wiele łatwiejsze do napisania, jeśli mamy do czynienia z wieloma urządzeniami (1k +)
lxx