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 :
- Cài đặt với pip
pip install --user pyftpdlib
- Chạy với
python -m pyftpdlib
, thêm -w
nếu bạn muốn truy cập viết quá.
- 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 FTP
trong 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/
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
và --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ó:
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 pyftpdlib
và ftpserver.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 <<<
...