Як я тимчасово запускаю FTP-сервер?


48

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

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

На платформі Windows таких інструментів є десяток десяток - я використовував 3CDaemon роками і нещодавно знайшов CoreFTP. Обидва відмінні. Ви налаштовуєте користувача, вказуєте його на каталог, а потім натискаєте кнопку "Пуск". Через пару хвилин ви, як правило, готові, і натискаєте кнопку "Стоп". Робота виконана.

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


2
Шкода, що я не встиг закінчити JetFTP. Він робить саме те , що ви описуєте, і він може працювати без привілеїв root (вам доведеться використовувати порт> 1024 звичайно). Він закінчиться без коробки без конфігурації та з гарним графічним інтерфейсом. Щоб отримати уявлення про те, що це буде, перегляньте JetHTTP , який схожий за дизайном та інтерфейсом.
Натан Осман

Дякую Джордж, я теж перевірю це. Можливо, найкраще з обох можна поєднувати. Хоча ранні дні для мене та пітона, тому я сумніваюся, що я там дуже допоможу!
Scaine

Відповіді:


53

Ви можете отримати FTP-сервер так просто, як два два три, використовуючи pyftpdlib :

  1. Встановити за допомогою pip pip install --user pyftpdlib
  2. Запустіть python -m pyftpdlib, додайте, -wякщо ви хочете також отримати доступ до запису.
  3. немає кроку третього :)

Тепер у вас є ftp-сервер, на якому ви можете ввійти, щоб анонімно ділитися домашнім каталогом. Це мається на увазі більше як тест модуля, але він робить те, що написано на бляшанці.

Ця команда:

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

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

  • увійдіть до нього за адресою anonymous@localhost:2121/

alt текст

Зауважте, що це програмне забезпечення випускається на умовах ліцензії MIT , а це означає, що ви можете робити в основному все, що завгодно. Прочитайте текст ліцензії, це лише кілька рядків, і знайте свої права.


Тепер цей скрипт не підтримує ім’я користувача та пароль, як частину його самостійної функціональності (я думаю, з міркувань безпеки).

Тому я додав цю функцію:

Тепер у вас є, крім усіх згаданих нами параметрів, параметри командного рядка

--username=USERNAMEі --password=PASSWORD:

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

Знову ж таки, використовуйте, --helpщоб побачити їх усіх.

Це має бути таким же простим, як це виходить.


Я також написав для цього невеличке гуї:

alt текст

  • Завантажте його тут (оновлено у версії 6)

    Мені шкода, що це 3999 рядків, але це зробить все, що робить оригінал. І я хотів зберегти все це в одному файлі. Коли він запускається без будь-яких параметрів (тобто зробіть його виконуваним і двічі клацніть по ньому, або створіть для нього пускову панель ), він запустить вам невеликий gui для налаштування вашого сервера. Ви все ще можете імпортувати його як модуль python або використовувати вищевказаний командний рядок fu.

    Відомі проблеми:

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

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


РЕДАКТУВАТИ: з моменту API pyftpdlibта ftpserver.pyзміни (і посилання пабітки на ubuntu відсутнє); більшість вищезазначених публікацій більше не працює. Для (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 <<<
...

Це виглядає як чудовий модуль - оскільки я намагаюся вивчити пітон, це здається, що це чудова відправна точка для створення графічного інтерфейсу навколо… Я боюся, що я не відзначаю це як відповідь (хоча я я схвалив це) з надією, що хтось знає про інструмент, який вже заснований на графічному інтерфейсі. Дякуємо за те, що в цьому розібралися і дякую за модифіковану версію.
Scaine

Дякую :-) Я не відмовлюсь, програмуючи GUI для цього зараз. : P
Стефано Палаццо

1
Дякую Стефано! Я ніколи цього не очікував! Це чудово - не тільки графічний інтерфейс, який потрібно спробувати (сьогодні ввечері), але й трохи навчальний посібник у тому, як ти збив його в першу чергу. Дуже дякую!
Scaine

5
paste.ubuntu.com/542726 та paste.ubuntu.com/542852 мертві, на жаль ... також ftpserver.py змінився, і, мабуть, вищезазначений пост більше не тримається (остання редакція, як видається, є r1116 , при цьому розл. ). Я вніс редагування допису з новим сценарієм (буде невидимим до експертної оцінки)
sdaau

1
просто для noob там, щоб використовувати вищезазначений скрипт, вам потрібно буде встановити "pyftpdlib" бібліотеку, зробити це запустити ... "sudo apt-get install python-pip", а потім "pip install pyftpdlib" ... і ви все встановили!
D.Snap

1
  • Ви можете використовувати pure-ftpd Встановіть pure-ftpd

  • Ви можете використовувати scp, якщо у вас є ssh-сервер.


3
Початківці можуть встановити сервер Pure-FTPd за 5 хвилин. Це може бути так само просто, як встановити пакет, набравши "pure-ftpd &" і ... ось і все. У вас вже є запущений сервер, і клієнти можуть почати з'єднуватися.
hhlp

1
Так, я ціную, що Pure легко, особливо з пакетом Gui pure-admin - я використовую його для мого постійного FTP-сервера. Однак з PureFTP ви / завжди / працюєте FTP, що є ризиком для безпеки для ноутбука, який підключається через WIFI. Мені не хочеться пам'ятати, щоб увімкнути мій брандмауер і турбуватися про (можливо, крихітні) ресурси, які він споживає. Боюся, що scp зазвичай не є варіантом, хоча деякі пристрої покращуються. Я думаю, що в останніх версіях F5 використовується scp, як і в Cisco's Manager Manager в наші дні.
Scaine

2
Я навіть не думаю, що вам потрібно запускати демон PureFTP після встановлення пакета. (Я думав, що це повинно бути розпочато postinstсценарієм в пакеті.)
Натан Осман

0

Для тих, хто копіює файли на маршрутизатори та з них, ви можете спробувати скористатися цим інструментом: tftpgui

Це працювало для мене і його дуже просто налаштувати. Це також сценарій Python, але робить tftp замість ftp. Все, що вам потрібно зробити - це встановити python-tk і завантажити сценарій

Єдине, про що слід пам’ятати, це те, що Ubunutu за замовчуванням на Phython2, тож найкращий спосіб запустити сценарій:

sudo python3 ./tftpgui.py

Потім можна налаштувати його в графічному інтерфейсі. коли ви закінчите, ви натискаєте на вихід, і це все.

Бо


2
Дякую Бо - я вже згадував цей корисний інструмент у своєму питанні. Однак я хотів чогось на зразок TFTPgui для FTP, якого не існувало, поки Стефано не підбив свого пітона.
Scaine

pythons ftplib замість цього працює чудово і набагато простіше сценарій, якщо мати справу з великою кількістю пристроїв (1k +)
lxx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.