Za pomocą pyftpdlib możesz uzyskać serwer FTP tak łatwy jak jeden dwa trzy :
- Zainstaluj za pomocą pip
pip install --user pyftpdlib
- Uruchom z
python -m pyftpdlib
, dodaj, -w
jeśli chcesz również dostęp do zapisu.
- 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 FTP
w bieżącym katalogu roboczym zamiast twojego domu. Wpisz, python ftpserver.py --help
aby uzyskać informacje o wszystkich opcjach.
- zaloguj się na
anonymous@localhost:2121/
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=USERNAME
i --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Ponownie użyj, --help
aby zobaczyć je wszystkie.
To powinno być tak proste, jak to możliwe.
Napisałem też dla niego trochę GUI:
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 pyftpdlib
i ftpserver.py
zmiany (i brakuje łączy pastebin ubuntu); większość powyższego postu już nie działa. W przypadku wersji (2014) pyftpdlib
uż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 <<<
...