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

48

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

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

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

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

Scaine
источник
2
Жаль, что я не успел закончить JetFTP. Он делает именно то , что вы описываете, и может работать без привилегий root (конечно, вам придется использовать порт> 1024). Он будет работать из коробки без конфигурации и с приятным графическим интерфейсом. Чтобы понять, на что это будет похоже, посмотрите JetHTTP , который похож по дизайну и интерфейсу.
Натан Осман
Спасибо Джордж, я тоже это проверю. Возможно, лучшее из обоих можно объединить. Первые дни для меня и Python, хотя, поэтому я сомневаюсь, что я буду там сильно помогать!
Scaine

Ответы:

53

Вы можете запустить 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/

альтернативный текст

Обратите внимание, что это программное обеспечение выпущено в соответствии с условиями Лицензии 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 <<<
...
Стефано Палаццо
источник
Это похоже на превосходный модуль - так как я пытаюсь изучить Python, похоже, что это отличная отправная точка для создания GUI вокруг ... Боюсь, что я не помечаю это как ответ (хотя я проголосовал за это) в надежде, что кто-то знает об инструменте, который уже основан на графическом интерфейсе. Спасибо за внимание к этому, хотя и спасибо за измененную версию.
Scaine
Спасибо :-) Я не сдамся, программирую GUI для этого сейчас. : P
Стефано Палаццо
1
Спасибо Стефано! Я никогда не ожидал этого! Это здорово - не только GUI, который можно опробовать (сегодня вечером), но и немного учебного пособия о том, как вы его скомбинировали. Большое спасибо!
Scaine
5
paste.ubuntu.com/542726 и paste.ubuntu.com/542852 мертвы, к сожалению ... также, ftpserver.py изменился, и, очевидно, вышеупомянутый пост больше не работает (последняя автономная ревизия, кажется, r1116 , с этим разный ) Я сделал правку на пост с новым скриптом (будет невидимым до рецензирования)
sdaau
1
просто для новичка, чтобы использовать вышеописанный скрипт, вам нужно установить библиотеку "pyftpdlib", чтобы она запустилась ... "sudo apt-get install python-pip", а затем "pip install pyftpdlib" ... и у вас все готово!
D.Snap
1
  • Вы можете использовать чистый ftpd Установите чистый ftpd

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

karthick87
источник
3
Новички могут установить сервер Pure-FTPd за 5 минут. Это может быть так же просто, как установить пакет, набрав «pure-ftpd &» и… и все. У вас уже есть работающий сервер, и клиенты могут начать подключаться.
hhlp
1
Да, я ценю, что Pure легко, особенно с пакетом GUI pure-admin - я использую его для своего постоянного FTP-сервера. Тем не менее, с PureFTP вы / всегда / используете FTP, что представляет угрозу безопасности для ноутбука, который подключается через WIFI. Я не хочу помнить о том, чтобы включить брандмауэр и беспокоиться о (возможно, крошечных) ресурсах, которые он потребляет. Боюсь, что scp обычно не подходит, хотя некоторые устройства становятся лучше - я думаю, что последние образы F5 используют scp, как и Cisco Call Manager в наши дни.
Scaine
2
Я даже не думаю, что вам нужно запускать демон PureFTP после установки пакета. (Я думал, что это должно было быть начато postinstсценарием в пакете.)
Натан Осман
0

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

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

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

sudo python3 ./tftpgui.py

Затем вы можете настроить его в графическом интерфейсе. когда вы закончите, вы нажимаете выход, и это все.

филиал

БО ВЕСТЕРГАРД
источник
2
Спасибо Бо - я уже упоминал этот полезный инструмент в своем вопросе. Тем не менее, я хотел что-то вроде TFTPgui для FTP, которого не было до тех пор, пока Стефано не выбил свой Python GUI.
Scaine
pythons ftplib работает отлично, и его гораздо проще писать, если он работает с большим количеством устройств (1k +)
lxx