ฉันจะรันเซิร์ฟเวอร์ FTP ชั่วคราวได้อย่างไร


48

ในโลกของ Ubuntu ดูเหมือนว่าคุณจะใช้เซิร์ฟเวอร์ FTP เสมอหรือไม่เคยทำ บางทีฉันอาจเป็นนักวิเคราะห์เครือข่ายคนแรกที่ต้องการแฟลชภาพ Cisco, Checkpoint หรือ Nokia โดยใช้ Ubuntu ... ฉันต้องการ FTP เซิร์ฟเวอร์เป็นเวลา 5 นาทีอาจไม่มากไปกว่านั้น

ฉันกำลังมองหาเซิร์ฟเวอร์ FTP ที่เริ่มต้นโดยผู้ใช้ ฉันเข้าใจว่าเป็นไปได้ว่าจะต้องทำงานกับ sudo ไม่เป็นไร - แต่ฉันต้องการเริ่ม / หยุดเหมือนโปรแกรมปกติ

บนแพลตฟอร์ม Windows เครื่องมือดังกล่าวมีค่าเล็กน้อยต่อโหล - ฉันใช้ 3CDaemon มาหลายปีแล้วและเพิ่งค้นพบ CoreFTP ทั้งสองอย่างยอดเยี่ยม คุณกำหนดค่าผู้ใช้ชี้ไปที่ไดเรกทอรีจากนั้นกดปุ่ม "เริ่ม" สองสามนาทีต่อมาคุณทำเสร็จแล้วและคุณกดปุ่ม "หยุด" งานเสร็จแล้ว

เครื่องมือดังกล่าวดูเหมือนไม่มีอยู่ใน Ubuntu ฉันพบโปรเจ็กต์ Google Codeที่สร้างอินสแตนซ์ TFTP อย่างสมเหตุสมผล (สมมติว่ามันยังทำงานอยู่ - ฉันไม่ได้ใช้มันในเวลาประมาณหนึ่งปีและไพ ธ อนย้ายไปแล้ว) แต่ FTP ล่ะ? มีอะไรอีกไหม?


2
เสียดายที่ฉันยังไม่มีเวลาทำ JetFTP ให้เสร็จ มันไม่ตรงกับสิ่งที่คุณอธิบายและมันสามารถทำงานได้โดยไม่ต้องใช้สิทธิ์ root (คุณจะต้องใช้พอร์ต> 1024 ของหลักสูตร) มันจะวิ่งออกจากกล่องโดยไม่มีการกำหนดค่าและมี GUI ที่ดีเช่นกัน หากต้องการทราบแนวคิดว่าจะเป็นอย่างไรโปรดดูJetHTTPซึ่งคล้ายกันในการออกแบบและส่วนต่อประสาน
Nathan Osman

ขอบคุณจอร์จฉันจะตรวจสอบว่าเกินไป บางทีอาจรวมสิ่งที่ดีที่สุดของทั้งสองอย่างเข้าด้วยกัน แต่เช้าตรู่สำหรับฉันและงูหลามดังนั้นฉันสงสัยว่าฉันจะช่วยมากที่นั่น!
Scaine

คำตอบ:


52

คุณสามารถทำให้เซิร์ฟเวอร์ 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/

ข้อความแสดงแทน

โปรดทราบว่าซอฟต์แวร์นี้เผยแพร่ภายใต้เงื่อนไขของ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 <<<
...

ดูเหมือนโมดูลที่ยอดเยี่ยม - เนื่องจากฉันพยายามเรียนรู้ python ดูเหมือนว่านี่เป็นจุดเริ่มต้นที่ยอดเยี่ยมสำหรับการสร้าง GUI รอบ ๆ ... ฉันกลัวว่าฉันจะไม่ทำเครื่องหมายคำตอบนี้เป็นคำตอบ (แม้ว่าฉันจะ เราได้อัปเดตแล้ว) หวังว่ามีคนรู้เครื่องมือที่ใช้ GUI อยู่แล้ว ขอบคุณสำหรับหัวขึ้นแม้ว่านี้และขอบคุณสำหรับรุ่นที่แก้ไข
Scaine

ขอบคุณ :-) ฉันจะไม่ยอมแพ้การเขียนโปรแกรม GUI ในตอนนี้ : P
Stefano Palazzo

1
ขอบคุณ Stefano! ฉันไม่เคยคาดคิดมาก่อน! นี่เป็นสิ่งที่ยอดเยี่ยมไม่เพียง แต่ GUI ที่จะลองใช้ (คืนนี้) แต่ยังเป็นแนวทางการสอนเล็กน้อยในการที่คุณเคาะมันเข้าด้วยกันตั้งแต่แรก ขอบคุณมาก!
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 ผู้ดูแลระบบบริสุทธิ์ - ฉันใช้มันสำหรับเซิร์ฟเวอร์ FTP ถาวรของฉัน อย่างไรก็ตามด้วย PureFTP คุณ / มักจะ / ใช้งาน FTP ซึ่งมีความเสี่ยงด้านความปลอดภัยกับแล็ปท็อปที่เชื่อมต่อผ่าน WiFi ฉันไม่ต้องการที่จะจำเปิดไฟร์วอลล์ของฉันและกังวลเกี่ยวกับทรัพยากร (อาจเล็ก) ที่มันใช้ ฉันกลัวว่า scp ไม่ใช่ทางเลือก แต่อุปกรณ์บางอย่างกำลังดีขึ้น - ฉันคิดว่าภาพ F5 ล่าสุดใช้ scp เช่นเดียวกับ Call Manager ของ Cisco ในปัจจุบัน
Scaine

2
ฉันไม่คิดว่าคุณจะต้องเปิด PureFTP daemon หลังจากติดตั้งแพ็คเกจ (ฉันคิดว่าpostinstสคริปต์ควรจะเริ่มต้นในแพ็คเกจ)
นาธานออสมัน

0

สำหรับผู้ที่คัดลอกไฟล์ไปยังและจากเราเตอร์คุณอาจต้องการลองใช้เครื่องมือนี้: tftpgui

มันใช้งานได้สำหรับฉันและตั้งค่าได้ง่ายมาก นอกจากนี้ยังเป็นสคริปต์ Python แต่ใช้ tftp แทน ftp สิ่งที่คุณต้องทำคือติดตั้ง python-tk และดาวน์โหลดสคริปต์

สิ่งเดียวที่ควรระวังคือ Ubunutu มีค่าเริ่มต้นเป็น Phython2 ดังนั้นวิธีที่ดีที่สุดในการเริ่มสคริปต์คือ:

sudo python3 ./tftpgui.py

จากนั้นคุณสามารถกำหนดค่าใน GUI เมื่อคุณทำเสร็จแล้วคุณกดออกและนั่นคือ

บ่อ


2
ขอบคุณ Bo - ฉันได้พูดถึงเครื่องมือที่มีประโยชน์ในคำถามของฉันแล้ว อย่างไรก็ตามฉันต้องการบางอย่างเช่น TFTPgui สำหรับ FTP ซึ่งไม่มีอยู่จนกว่า Stefano จะเคาะไพ ธ อน gui ของเขา
Scaine

pythons ftplib ทำงานได้ดีแทนและง่ายกว่าในการเขียนสคริปต์หากต้องรับมือกับอุปกรณ์จำนวนมาก (1k +)
lxx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.