Как мне временно запустить FTP-сервер?

В мире Ubuntu, кажется, вы либо всегда используете FTP-сервер, либо вы никогда не делаете. Возможно, я первый сетевой аналитик, которому необходимо прошить образ Cisco, Checkpoint или Nokia с помощью Ubuntu ... Мне нужен FTP-сервер на 5 минут, не более того.

Я ищу простой FTP-сервер, инициированный пользователем. Я понимаю, что, скорее всего, придется работать с sudo. Это нормально, но я хочу запустить / остановить его как обычную программу.

На платформе Windows таких инструментов - десятки - я годами использовал 3CDaemon и недавно нашел CoreFTP. Оба отлично. Вы настраиваете пользователя, указываете на каталог, затем нажимаете кнопку «Пуск». Пару минут спустя, как правило, вы сделали, и вы нажали кнопку «Стоп». Работа выполнена.

Похоже, что такие инструменты не существуют в Ubuntu. Я нашел проект Google Code , который довольно неплохо создает экземпляр TFTP (при условии, что он все еще работает - я не использовал его около года и Python перешел), но как насчет FTP? Что-нибудь там?

48
задан 12 December 2010 в 18:05

3 ответа

Можно получить FTP-сервер, идущий столь же легкий как один два три использования pyftpdlib:

  1. Установка с зернышком pip install --user pyftpdlib
  2. Выполненный с python -m pyftpdlib, добавить -w если Вы хотите доступ для записи также.
  3. нет никакого шага три :)

У Вас теперь есть FTP-сервер, который можно войти в систему, анонимно совместно использовав корневой каталог. Это предназначено больше как тест модуля, но он делает то, что он говорит относительно олова.

Эта команда:

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

будет служить, без полномочий пользователя root, на порте 2121 и предоставлять доступ для записи анонимным пользователям. Это будет также использовать каталог FTP в текущем рабочем каталоге вместо Вашего дома. Ввести python ftpserver.py --help получить информацию обо всех опциях.

  • войдите в него в anonymous@localhost:2121/

alt text

Обратите внимание на то, что это программное обеспечение выпущено в соответствии с Лицензией MIT, что означает, что можно сделать в основном, чему когда-либо Вы нравитесь им. Прочитайте текст лицензии, это - только несколько строк, и знайте свои права.


Теперь, этот сценарий не поддерживает имя пользователя и пароль как часть, он - автономная функциональность (из соображений безопасности, которые я воображаю).

Таким образом, я добавил ту опцию:

Вы теперь имеете, в дополнение ко всем опциям, которые я упомянул, параметры командной строки

--username=USERNAME и --password=PASSWORD:

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

Снова, использовать --help видеть их всех.

Это должно быть столь легко, как это добирается.


Я также записал немного gui для него:

alt text

  • Загрузите его здесь (обновленный в версии. 6)

    Я сожалею, что это - 3 999 строк долго, но это сделает все, что оригинал делает. И я хотел сохранить все это в одном файле. Когда это запускается без любых параметров (т.е. сделайте это исполняемым файлом и дважды щелкните по нему или создайте средство запуска для него), это запускает немного gui для Вас для конфигурирования сервера. Можно все еще импортировать его как модуль Python или использовать вышеупомянутую командную строку fu.

    Известные проблемы:

    • Я ничем не обеспокоился кроме порта 2121. Это должно быть просто, делание настраивающегося порта требует сложной обработки ошибок, которой я не хочу, чтобы пользователь обеспокоился. 2121 должен всегда хорошо работать.

    • Это не предупредит Вас, как командная строка делает, об использовании небезопасной конфигурации. Т.е. не устанавливая пароль или что-то как этот.


Править: начиная с API pyftpdlib и ftpserver.py измененный (и человечность 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 <<<
...
53
ответ дан 12 December 2010 в 18:05
  • Можно использовать чистый-ftpd Install pure-ftpd

  • Можно использовать scp, если у Вас есть ssh сервер.

1
ответ дан 12 December 2010 в 18:05

Для тех, кто копирует файлы на маршрутизаторы и с них, вы можете попробовать этот инструмент: tftpgui

Он работает для меня и очень прост в настройке. Это также скрипт на Python, но он делает tftp вместо ftp. Все, что вам нужно сделать, это установить python-tk и загрузить скрипт

. Единственное, что нужно знать, это то, что Ubunutu по умолчанию использует Phython2, поэтому лучший способ запустить скрипт:

sudo python3 ./tftpgui.py
[ 115] Затем вы можете настроить его в графическом интерфейсе. когда вы закончите, вы нажимаете выход, и это все.

Бо

0
ответ дан 12 December 2010 в 18:05

Другие вопросы по тегам:

Похожие вопросы: