Làm cách nào để tạm thời chạy máy chủ FTP?


48

Trong thế giới của Ubuntu, có vẻ như bạn luôn chạy máy chủ FTP hoặc bạn không bao giờ làm thế. Có lẽ tôi là nhà phân tích mạng đầu tiên cần flash hình ảnh của Cisco, Checkpoint hoặc Nokia bằng Ubuntu ... Tôi cần một máy chủ FTP trong khoảng 5 phút, không nhiều hơn thế.

Tôi đang tìm kiếm một máy chủ FTP đơn giản, do người dùng khởi tạo. Tôi hiểu rằng nó có thể sẽ phải chạy với sudo. Điều đó tốt - nhưng tôi muốn bắt đầu / dừng nó như một chương trình bình thường.

Trên nền tảng Windows, các công cụ như vậy rất nhiều - tôi đã sử dụng 3CDaemon trong nhiều năm và gần đây đã tìm thấy CoreFTP. Cả hai đều xuất sắc. Bạn định cấu hình người dùng, trỏ nó vào một thư mục, sau đó nhấn nút "Bắt đầu". Một vài phút sau, bạn thường hoàn tất và bạn nhấn nút "Dừng". Công việc hoàn thành.

Những công cụ như vậy dường như không tồn tại trên Ubuntu. Tôi đã tìm thấy một dự án Google Code tạo ra một cá thể TFTP một cách hợp lý (giả sử nó vẫn chạy - tôi đã không sử dụng nó trong khoảng một năm và python đã chuyển sang), nhưng FTP thì sao? Có gì ngoài đó không?


2
Thật tệ, tôi đã không có thời gian để hoàn thành JetFTP. Nó thực hiện chính xác những gì bạn mô tả nó có thể chạy mà không có quyền root (tất nhiên bạn sẽ phải sử dụng một cổng> 1024). Nó sẽ chạy ra khỏi hộp không có cấu hình và với một GUI đẹp. Để có được ý tưởng về nó sẽ như thế nào, hãy xem JetHTTP , tương tự về thiết kế và giao diện.
Nathan Osman

Cảm ơn George, tôi cũng sẽ kiểm tra xem. Có lẽ tốt nhất của cả hai có thể được kết hợp. Những ngày đầu đối với tôi và trăn, vì vậy tôi nghi ngờ tôi sẽ giúp đỡ nhiều ở đó!
Scaine

Câu trả lời:


52

Bạn có thể nhận được một máy chủ FTP dễ dàng như một hai ba bằng cách sử dụng pyftpdlib :

  1. Cài đặt với pip pip install --user pyftpdlib
  2. Chạy với python -m pyftpdlib, thêm -wnếu bạn muốn truy cập viết quá.
  3. không có bước ba :)

Bây giờ bạn có một máy chủ ftp mà bạn có thể đăng nhập để chia sẻ ẩn danh thư mục chính của bạn. Điều này có ý nghĩa nhiều hơn như là một thử nghiệm của mô-đun, nhưng nó thực hiện những gì nó nói trên hộp thiếc.

Lệnh này:

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

sẽ phục vụ, không có quyền root, trên cổng 2121 và cấp quyền truy cập ghi cho người dùng ẩn danh. Nó cũng sẽ sử dụng thư mục FTPtrong thư mục làm việc hiện tại thay vì nhà của bạn. Nhập python ftpserver.py --helpđể có được thông tin về tất cả các tùy chọn.

  • đăng nhập vào anonymous@localhost:2121/

văn bản thay thế

Xin lưu ý rằng phần mềm này được phát hành theo các điều khoản của Giấy phép MIT , có nghĩa là về cơ bản bạn có thể làm những gì bạn muốn với nó. Đọc văn bản giấy phép, đó chỉ là một vài dòng và biết các quyền của bạn.


Bây giờ, tập lệnh này không hỗ trợ tên người dùng và mật khẩu như là một phần của chức năng độc lập (vì lý do bảo mật mà tôi tưởng tượng).

Vì vậy, tôi đã thêm tính năng đó:

Bây giờ bạn có, ngoài tất cả các tùy chọn tôi đã đề cập, các tham số dòng lệnh

--username=USERNAME--password=PASSWORD:

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

Một lần nữa, sử dụng --helpđể xem tất cả.

Điều này nên dễ dàng như nó được.


Tôi cũng đã viết một ít gui cho nó:

văn bản thay thế

  • Tải xuống tại đây (cập nhật tại rev. 6)

    Tôi xin lỗi, nó dài 3999 dòng, nhưng nó sẽ làm mọi thứ như bản gốc. Và tôi muốn giữ tất cả trong một tập tin. Khi nó bắt đầu mà không có bất kỳ tham số nào (nghĩa là làm cho nó có thể thực thi được và nhấp đúp vào nó hoặc tạo một trình khởi chạy cho nó ), nó sẽ khởi động một gui nhỏ để bạn định cấu hình máy chủ của mình. Bạn vẫn có thể nhập nó dưới dạng mô-đun python hoặc sử dụng dòng lệnh fu ở trên.

    Các vấn đề đã biết:

    • Tôi không bận tâm đến bất cứ điều gì khác ngoài cổng 2121. Điều này rất đơn giản, làm cho cấu hình cổng có thể yêu cầu xử lý lỗi phức tạp mà tôi không muốn người dùng bận tâm. 2121 nên luôn hoạt động tốt.

    • Nó sẽ không cảnh báo bạn, giống như dòng lệnh, về việc sử dụng một cấu hình không an toàn. Tức là không đặt mật khẩu hoặc một cái gì đó tương tự.


EDIT: vì API của pyftpdlibftpserver.pyđã thay đổi (và các liên kết pastebin của Ubuntu đã biến mất); hầu hết các bài viết trên không hoạt động nữa. Đối với phiên bản (2014) của pyftpdlib, hãy sử dụng tập lệnh này ( ftpserver-cli.py) để đạt được như trên:

#!/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()

gọi với:

$ 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 <<<
...

Đây trông giống như một mô-đun tuyệt vời - vì tôi đang cố gắng học python, có vẻ như đây là điểm khởi đầu tuyệt vời để xây dựng GUI xung quanh ... Tôi sợ rằng tôi không đánh dấu đây là câu trả lời (mặc dù tôi 'đã nâng cấp nó) với hy vọng ai đó biết về một công cụ đã dựa trên GUI. Cảm ơn cho những người đứng đầu về điều này mặc dù và cảm ơn cho phiên bản sửa đổi.
Scaine

Cảm ơn :-) Tôi sẽ không từ bỏ, lập trình GUI cho nó ngay bây giờ. : P
Stefano Palazzo

1
Cảm ơn Stefano! Tôi không bao giờ mong đợi điều đó! Điều này thật tuyệt - không chỉ là một GUI để dùng thử (tối nay), mà còn có một chút hướng dẫn giảng dạy về cách bạn kết hợp nó ở vị trí đầu tiên. Cảm ơn nhiều!
Scaine

5
paste.ubuntu.com/542726paste.ubuntu.com/542852 đang chết, không may ... cũng có, ftpserver.py thay đổi, và dường như bài viết ở trên không giữ nữa (cuối cùng phiên bản độc lập có vẻ là r1116 , với điều này khác biệt ). Tôi đã thực hiện chỉnh sửa bài đăng với một tập lệnh mới (sẽ ẩn đi cho đến khi đánh giá ngang hàng)
sdaau

1
chỉ với noob ngoài kia, để sử dụng đoạn script trên, bạn sẽ cần cài đặt thư viện "pyftpdlib", để chạy nó ... "sudo apt-get install python-pip" và sau đó "pip install pyftpdlib" ... và tất cả các bạn đã thiết lập
D.Snap

1
  • Bạn có thể sử dụng thuần-ftpd Cài đặt thuần-ftpd

  • Bạn có thể sử dụng scp nếu bạn có máy chủ ssh.


3
Người mới bắt đầu có thể cài đặt máy chủ Pure-FTPd trong 5 phút. Nó có thể đơn giản như cài đặt gói, gõ vào dòng thuần thuần-ftpd & và đó là tất cả. Bạn đã có một máy chủ đang chạy và khách hàng có thể bắt đầu kết nối.
hhlp

1
Đúng, tôi đánh giá cao rằng Pure rất dễ, đặc biệt là với gói gui quản trị thuần - tôi sử dụng nó cho máy chủ FTP vĩnh viễn của mình. Tuy nhiên, với PureFTP, bạn / luôn / đang chạy FTP, đây là một rủi ro bảo mật với máy tính xách tay kết nối qua WIFI. Tôi không muốn phải nhớ bật tường lửa của mình và lo lắng về tài nguyên (có lẽ rất nhỏ) mà nó tiêu thụ. Tôi sợ scp thường không phải là một tùy chọn, mặc dù một số thiết bị đang trở nên tốt hơn - tôi nghĩ rằng hình ảnh F5 mới nhất sử dụng scp, cũng như Trình quản lý cuộc gọi của Cisco ngày nay.
Scaine

2
Tôi thậm chí không nghĩ rằng bạn cần khởi chạy trình nền PureFTP sau khi cài đặt gói. (Tôi nghĩ rằng nó đáng lẽ phải được bắt đầu bởi postinstkịch bản trong gói.)
Nathan Osman

0

Đối với những người sao chép tệp đến và từ bộ định tuyến, bạn có thể muốn dùng thử công cụ này: tftpgui

Nó làm việc cho tôi và rất dễ dàng để cấu hình. Nó cũng là một kịch bản Python nhưng không tftp thay vì ftp. Tất cả bạn phải làm là cài đặt python-tk và tải xuống tập lệnh

Điều duy nhất cần biết là Ubunutu mặc định là Phython2, vì vậy cách tốt nhất để bắt đầu tập lệnh là:

sudo python3 ./tftpgui.py

Sau đó, bạn có thể cấu hình nó trong GUI. Khi bạn đã hoàn tất, bạn nhấn exit và thế là xong.

Bồ


2
Cảm ơn Bo - Tôi đã đề cập đến công cụ hữu ích đó trong câu hỏi của tôi. Tuy nhiên, tôi muốn một cái gì đó như TFTPgui cho FTP, thứ không tồn tại cho đến khi Stefano hạ gục con trăn của mình.
Scaine

Thay vào đó, pythons ftplib hoạt động tốt và kịch bản dễ dàng hơn nhiều nếu xử lý nhiều thiết bị (1k +)
lxx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.