Bagaimana cara saya menjalankan server FTP untuk sementara?

48

Di dunia Ubuntu, sepertinya Anda selalu menjalankan server FTP atau tidak pernah melakukannya. Mungkin saya analis jaringan pertama yang diperlukan untuk menginstal Cisco, Checkpoint, atau gambar Nokia menggunakan Ubuntu ... Saya perlu server FTP selama 5 menit, tidak lebih dari itu.

Saya mencari server FTP sederhana yang diprakarsai oleh pengguna. Saya mengerti bahwa kemungkinan harus dijalankan dengan sudo. Tidak apa-apa - tetapi saya ingin memulai / menghentikannya seperti program normal.

Pada platform Windows, alat-alat seperti itu adalah selusin sepeser pun - Saya telah menggunakan 3CDaemon selama bertahun-tahun dan baru-baru ini menemukan CoreFTP. Keduanya luar biasa. Anda mengonfigurasi pengguna, mengarahkannya ke direktori, lalu menekan tombol "Start". Beberapa menit kemudian, Anda umumnya selesai dan Anda menekan tombol "Stop". Pekerjaan selesai.

Alat seperti itu sepertinya tidak ada di Ubuntu. Saya menemukan proyek Google Code yang membuat instance TFTP dengan cukup baik (dengan asumsi itu masih berjalan - saya belum menggunakannya dalam waktu sekitar satu tahun dan python telah pindah), tetapi bagaimana dengan FTP? Ada sesuatu di luar sana?

Scaine
sumber
2
Sayang sekali saya belum punya waktu untuk menyelesaikan JetFTP. Itu tidak persis seperti yang Anda gambarkan, dan dapat berjalan tanpa hak root (Anda harus menggunakan port> 1024 tentu saja). Ini akan kehabisan kotak tanpa konfigurasi dan dengan GUI yang bagus juga. Untuk mengetahui seperti apa nantinya, periksa JetHTTP , yang memiliki desain dan antarmuka yang mirip.
Nathan Osman
Terima kasih George, saya akan memeriksanya juga. Mungkin yang terbaik dari keduanya dapat dikombinasikan. Awal hari bagi saya dan python, jadi saya ragu saya akan banyak membantu di sana!
Scaine

Jawaban:

53

Anda bisa membuat server FTP berjalan semudah satu dua tiga menggunakan pyftpdlib :

  1. Instal dengan pip pip install --user pyftpdlib
  2. Jalankan dengan python -m pyftpdlib, tambahkan -wjika Anda ingin akses tulis juga.
  3. tidak ada langkah ketiga :)

Anda sekarang memiliki server ftp yang dapat Anda masuki untuk membagikan direktori home Anda secara anonim. Ini lebih dimaksudkan sebagai tes modul, tetapi melakukan apa yang tertulis di kaleng.

Perintah ini:

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

akan melayani, tanpa hak akses root, pada port 2121 dan memberikan akses tulis kepada pengguna anonim. Ini juga akan menggunakan direktori FTPdi direktori kerja saat ini, bukan di rumah Anda. Ketik python ftpserver.py --helpuntuk mendapatkan informasi tentang semua opsi.

  • masuk ke sana di anonymous@localhost:2121/

teks alternatif

Harap dicatat bahwa perangkat lunak ini dirilis di bawah ketentuan Lisensi MIT , yang berarti pada dasarnya Anda dapat melakukan apa pun yang Anda suka dengannya. Baca teks lisensi, hanya beberapa baris, dan ketahui hak Anda.


Sekarang, skrip ini tidak mendukung nama pengguna dan kata sandi sebagai bagian dari fungsi yang berdiri sendiri (untuk alasan keamanan saya bayangkan).

Jadi saya telah menambahkan fitur itu:

Anda sekarang memiliki, di samping semua opsi yang saya sebutkan, parameter baris perintah

--username=USERNAMEdan --password=PASSWORD:

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

Sekali lagi, gunakan --helpuntuk melihat semuanya.

Ini harus semudah yang didapat.


Saya juga menulis sedikit gui untuk itu:

teks alternatif

  • Unduh di sini (diperbarui pada rev. 6)

    Maaf, ini panjangnya 3999 baris, tapi itu akan melakukan semua yang asli lakukan. Dan saya ingin menyimpan semuanya dalam satu file. Ketika dimulai tanpa parameter apa pun (mis. Membuatnya dapat dieksekusi dan klik dua kali, atau buat peluncur untuk itu ), itu mulai sedikit gui bagi Anda untuk mengkonfigurasi server Anda. Anda masih dapat mengimpornya sebagai modul python atau menggunakan fu baris perintah di atas.

    Masalah Dikenal:

    • Saya tidak terganggu dengan apa pun selain port 2121. Ini harus sederhana, membuat port dapat dikonfigurasi membutuhkan penanganan kesalahan kompleks yang saya tidak ingin pengguna repot dengan. 2121 harus selalu berfungsi dengan baik.

    • Ini tidak akan memperingatkan Anda, seperti baris perintah, tentang menggunakan konfigurasi tidak aman. Yaitu tidak menetapkan kata sandi atau sesuatu seperti itu.


EDIT: sejak API pyftpdlibdan ftpserver.pydiubah (dan tautan pastebin ubuntu hilang); sebagian besar posting di atas tidak berfungsi lagi. Untuk versi (2014) pyftpdlib, gunakan skrip ini ( ftpserver-cli.py) untuk mencapai yang sama seperti di atas:

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

telepon dengan:

$ 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 <<<
...
Stefano Palazzo
sumber
Ini terlihat seperti modul yang luar biasa - karena saya mencoba untuk belajar python, sepertinya ini adalah titik awal yang bagus untuk membangun GUI di sekitar ... Saya takut saya tidak menandai ini sebagai jawabannya (walaupun saya Saya telah memutarnya) dengan harapan bahwa seseorang mengetahui alat yang sudah berbasis GUI. Terima kasih atas informasi ini dan terima kasih untuk versi yang dimodifikasi.
Scaine
Terima kasih :-) Saya tidak akan menyerah, memprogram GUI untuk itu sekarang. : P
Stefano Palazzo
1
Terima kasih Stefano! Saya tidak pernah menyangka itu! Ini bagus - tidak hanya GUI untuk dicoba (malam ini), tetapi juga sedikit panduan mengajar tentang cara Anda mengaitkannya bersama-sama. Terimakasih banyak!
Scaine
5
paste.ubuntu.com/542726 dan paste.ubuntu.com/542852 sudah mati, sayangnya ... juga, ftpserver.py berubah, dan tampaknya pos di atas tidak tahan lagi (revisi mandiri terakhir tampaknya r1116 , dengan ini beda ). Saya telah mengedit posting dengan skrip baru (tidak akan terlihat sampai peer review)
sdaau
1
hanya untuk noob di luar sana, untuk menggunakan skrip di atas Anda perlu menginstal pustaka "pyftpdlib", untuk menjalankannya ... "sudo apt-get install python-pip" dan kemudian "pip install pyftpdlib" ... dan Anda sudah siap!
D.Snap
1
  • Anda dapat menggunakan pure-ftpd Instal pure-ftpd

  • Anda dapat menggunakan scp jika Anda memiliki server ssh.

karthick87
sumber
3
Pemula dapat menginstal server Pure-FTPd dalam 5 menit. Ini bisa sesederhana menginstal paket, mengetik "pure-ftpd &" dan ... itu saja. Anda sudah memiliki server yang berjalan, dan klien dapat mulai terhubung.
hhlp
1
Yap, saya menghargai bahwa Pure itu mudah, terutama dengan paket gui admin murni - Saya menggunakannya untuk server FTP permanen saya. Namun, dengan PureFTP, Anda / selalu / menjalankan FTP, yang merupakan risiko keamanan dengan laptop yang terhubung melalui WIFI. Saya tidak ingin harus ingat untuk menyalakan firewall saya dan khawatir tentang sumber daya (mungkin kecil) yang dikonsumsi. Saya khawatir scp biasanya bukan pilihan, meskipun beberapa perangkat menjadi lebih baik - saya pikir gambar F5 terbaru menggunakan scp, seperti halnya Call Manager Cisco hari ini.
Scaine
2
Saya bahkan tidak berpikir Anda perlu meluncurkan daemon PureFTP setelah menginstal paket. (Saya pikir itu seharusnya dimulai dengan postinstskrip dalam paket.)
Nathan Osman
0

Bagi mereka yang menyalin file ke dan dari router Anda mungkin ingin mencoba alat ini: tftpgui

Ini bekerja untuk saya dan sangat mudah dikonfigurasi. Ini juga merupakan skrip Python tetapi tidak tftp bukan ftp. Yang harus Anda lakukan adalah menginstal python-tk dan mengunduh skripnya

Satu-satunya hal yang harus diperhatikan adalah bahwa Ubunutu default ke Phython2 sehingga cara terbaik untuk memulai skrip adalah:

sudo python3 ./tftpgui.py

Anda kemudian dapat mengkonfigurasinya di GUI. ketika Anda selesai Anda menekan keluar dan hanya itu.

Bo

BO VESTERGAARD
sumber
2
Terima kasih Bo - Saya sudah menyebutkan alat yang berguna dalam pertanyaan saya. Namun, saya menginginkan sesuatu seperti TFTPgui untuk FTP, yang tidak ada sampai Stefano mengetuk python gui-nya.
Scaine
pythons ftplib bekerja dengan baik sebagai gantinya dan jauh lebih mudah untuk skrip jika berurusan dengan banyak perangkat (1k +)
lxx