Вы можете запустить FTP-сервер так же просто, как один-два-три, используя pyftpdlib :
- Установить с помощью пункта
pip install --user pyftpdlib
- Запустите
python -m pyftpdlib
, добавьте, -w
если вы тоже хотите доступ для записи.
- нет третьего шага :)
Теперь у вас есть ftp-сервер, на который вы можете войти, чтобы анонимно поделиться своим домашним каталогом. Это больше относится к тестированию модуля, но он делает то, что говорит на жестяной банке.
Эта команда:
python -m pyftpdlib --directory=FTP --port=2121 --write
будет работать без прав root на порту 2121 и предоставлять доступ на запись анонимным пользователям. Он также будет использовать каталог FTP
в текущем рабочем каталоге вместо вашего дома. Введите, python ftpserver.py --help
чтобы получить информацию обо всех вариантах.
- войти в это в
anonymous@localhost:2121/
Обратите внимание, что это программное обеспечение выпущено в соответствии с условиями Лицензии MIT , что означает, что вы можете делать с ним все, что пожелаете. Прочитайте текст лицензии, это всего лишь несколько строк, и знайте свои права.
Теперь этот скрипт не поддерживает имя пользователя и пароль как часть его автономной функциональности (из соображений безопасности, я думаю).
Итак, я добавил эту функцию:
Теперь у вас есть, помимо всех упомянутых мной опций, параметры командной строки
--username=USERNAME
и --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Опять же, используйте, --help
чтобы увидеть их всех.
Это должно быть так просто, как только можно.
Я также написал небольшой графический интерфейс для этого:
Загрузите его здесь (обновлено на ред. 6)
Я сожалею, что это 3999 строк, но он сделает все, что делает оригинал. И я хотел сохранить все это в одном файле. Когда он запускается без каких-либо параметров (т. Е. Сделать его исполняемым и дважды щелкнуть по нему или создать для него панель запуска ), он запускает небольшой графический интерфейс для настройки вашего сервера. Вы все еще можете импортировать его как модуль Python или использовать приведенную выше командную строку fu.
Известные проблемы:
Я не беспокоился ни о чем, кроме порта 2121. Это должно быть просто, для настройки настраиваемого порта требуется сложная обработка ошибок, с которой я не хочу, чтобы пользователь беспокоился. 2121 всегда должен работать нормально.
Как и командная строка, она не предупредит вас об использовании небезопасной конфигурации. Т.е. не устанавливать пароль или что-то в этом роде.
РЕДАКТИРОВАТЬ: с тех пор API pyftpdlib
и ftpserver.py
изменилось (и ссылки на Ubuntu pastebin ушли); большая часть вышеупомянутого поста больше не работает. Для версии (2014) pyftpdlib
, используйте этот скрипт ( ftpserver-cli.py
) для достижения того же, что и выше:
#!/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()
позвонить с:
$ 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 <<<
...