คุณสามารถทำให้เซิร์ฟเวอร์ FTP นั้นง่ายเหมือนสองสามคนโดยใช้pyftpdlib :
- ติดตั้งด้วย pip
pip install --user pyftpdlib
- ทำงานด้วย
python -m pyftpdlib
เพิ่ม-w
ถ้าคุณต้องการเข้าถึงการเขียนด้วย
- ไม่มีขั้นตอนที่สาม :)
ตอนนี้คุณมีเซิร์ฟเวอร์ ftp ซึ่งคุณสามารถเข้าสู่ระบบเพื่อแชร์โฮมไดเร็กตอรี่ของคุณโดยไม่ระบุชื่อ สิ่งนี้มีความหมายมากกว่าการทดสอบของโมดูล แต่มันทำในสิ่งที่มันบอกบนดีบุก
คำสั่งนี้:
python -m pyftpdlib --directory=FTP --port=2121 --write
จะให้บริการโดยไม่มีสิทธิ์รูทบนพอร์ต 2121 และให้สิทธิ์การเขียนแก่ผู้ใช้นิรนาม มันจะใช้ไดเรกทอรีFTP
ในไดเรกทอรีการทำงานปัจจุบันแทนที่บ้านของคุณ พิมพ์python ftpserver.py --help
เพื่อรับข้อมูลเกี่ยวกับตัวเลือกทั้งหมด
- เข้าสู่ระบบได้ที่
anonymous@localhost:2121/
โปรดทราบว่าซอฟต์แวร์นี้เผยแพร่ภายใต้เงื่อนไขของMIT Licenseซึ่งหมายความว่าคุณสามารถทำตามที่คุณต้องการได้ อ่านข้อความลิขสิทธิ์เพียงไม่กี่บรรทัดและรู้สิทธิ์ของคุณ
ตอนนี้สคริปต์นี้ไม่สนับสนุนชื่อผู้ใช้และรหัสผ่านซึ่งเป็นส่วนหนึ่งของการทำงานแบบสแตนด์อโลน (ด้วยเหตุผลด้านความปลอดภัยที่ฉันจินตนาการ)
ดังนั้นฉันได้เพิ่มคุณสมบัตินั้น:
ตอนนี้คุณมีนอกเหนือไปจากตัวเลือกทั้งหมดที่ฉันพูดถึงพารามิเตอร์บรรทัดคำสั่ง
--username=USERNAME
และ--password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
อีกครั้งใช้--help
เพื่อดูพวกเขาทั้งหมด
นี่ควรเป็นเรื่องง่ายอย่างที่ควรจะเป็น
ฉันยังเขียน gui เล็กน้อยสำหรับมัน:
ดาวน์โหลดได้ที่นี่ (อัพเดทเมื่อ rev 6)
ฉันขอโทษที่มีความยาว 3999 บรรทัด แต่จะทำทุกอย่างตามที่เป็นต้นฉบับ และฉันต้องการเก็บทุกอย่างไว้ในไฟล์เดียว เมื่อมันเริ่มโดยไม่มีพารามิเตอร์ใด ๆ (เช่นทำให้มันทำงานได้และดับเบิลคลิกหรือสร้างตัวเรียกใช้งาน ) มันเริ่มต้น gui เล็กน้อยเพื่อให้คุณกำหนดค่าเซิร์ฟเวอร์ของคุณ คุณยังคงสามารถนำเข้ามันเป็นโมดูลหลามหรือใช้ 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 <<<
...