अजगर में एक लाइन ftp सर्वर


101

क्या एक साधारण एफ़टीपी सर्वर करने के लिए अजगर में एक लाइन कमांड होना संभव है? मैं एक FTP सर्वर स्थापित करने के लिए बिना एक लिनक्स बॉक्स में फ़ाइलों को स्थानांतरित करने के लिए त्वरित और अस्थायी तरीके से ऐसा करने में सक्षम होना चाहता हूं। अधिमानतः अजगर पुस्तकालयों में निर्मित का उपयोग करने का एक तरीका तो स्थापित करने के लिए कुछ भी अतिरिक्त नहीं है।


8
जब तक आप pftftpdlib जैसे किसी बाहरी अजगर पुस्तकालय का उपयोग नहीं करते हैं, मुझे संदेह है कि आप कोड की एक पंक्ति के साथ ऐसा कर सकते हैं। पायथन में एक अंतर्निहित ftp क्लाइंट है, लेकिन सर्वर नहीं है।
GWW

3
फ़ाइलों को लिनक्स में स्थानांतरित करें ??? आप सिर्फ scp का उपयोग क्यों नहीं करते?
लियोनमैक्स

क्यों नहीं sshfs का उपयोग करें ? सबसे तेज़ स्थानांतरण दरों के लिए (एक LAN में) विकल्प का उपयोग करें -o Ciphers=arcfour, अर्थात sshfs $REMOTEHOST:$DIRECTORY $MOUNTPOINT -o Ciphers=arcfour, कॉपी करें और स्थानांतरित करें, नाम बदलें, अपने फाइल सिस्टम में अपनी फ़ाइलों का प्रबंधन करें। sshfs मैक OSX के लिए भी उपलब्ध है।
एरिक

जवाबों:


132

अप्रचलित मुड़ उदाहरण:

twistd -n ftp

और शायद उपयोगी:

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.

4
बहुत अच्छा! लेकिन ओपी ने मानक अजगर पुस्तकालय का उपयोग करने के लिए कहा क्योंकि वह अन्य पुस्तकालय स्थापित नहीं करना चाहता था।
एंड्रिया स्पैडाकासिनी

19
ठीक है, मैं वोट देने लायक हूं, लेकिन वास्तव में, लोगों को ट्विस्टेड पता होना चाहिए। और निश्चित रूप से ट्विस्टेड कई लिनक्स के बेस इंस्टाल में है।
अली अफसर

5
आपको वोट डाउन नहीं करना चाहिए, उपयोगकर्ता ने कहा "अधिमानतः", "आवश्यक" नहीं। ऐसा करने का कोई तरीका नहीं है कि पायथन बिल्डिन लाइब्रेरीज़ के साथ, आपको थर्ड पार्टी सॉफ़्टवेयर इंस्टॉल करना होगा।
एंड्रे पुएल

4
@Andrea Spadaccini: भविष्य के लोग यहां। हमें यह उत्तर वास्तव में बहुत उपयोगी लगा। ;)
बेंजामिन वोहलवेंड

1
@BenjaminWohlwend: भविष्य में आगे ... अभी भी बहुत उपयोगी है। ऐसा लगता है कि हमें बिल्‍डिन में सिंपल एफटीपीएसवर की जरूरत है।
एमजीपी

89

की जाँच करें pyftpdlib जैमपाओलो Rodola से। यह अजगर के लिए वहाँ सबसे अच्छा ftp सर्वरों में से एक है। इसका उपयोग Google के क्रोमियम (उनके ब्राउज़र) और बाज़ार (एक संस्करण नियंत्रण प्रणाली) में किया जाता है। यह RFC-959 (aka: FTP सर्वर कार्यान्वयन कल्पना) के लिए पायथन पर सबसे पूर्ण कार्यान्वयन है ।

कमांडलाइन से:

python -m pyftpdlib

वैकल्पिक रूप से 'my_server.py':

#!/usr/bin/env python

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

यदि आप कुछ अधिक जटिल चाहते हैं तो वेबसाइट पर और उदाहरण हैं।

कमांड लाइन विकल्पों की सूची प्राप्त करने के लिए:

python -m pyftpdlib --help

ध्यान दें, यदि आप एक मानक ftp पोर्ट को ओवरराइड या उपयोग करना चाहते हैं, तो आपको व्यवस्थापक विशेषाधिकार (जैसे sudo) की आवश्यकता होगी।


1
के रूप में 1.3.0: >>> from pyftpdlib import ftpserver:pyftpdlib\ftpserver.py:54: DeprecationWarning: pyftpdlib.ftpserver module is deprecated
डेनियल रीस

2
वर्तमान संस्करण के लिए अपडेटेड 27 अगस्त 2014। अब डिप्रेशन चेतावनियाँ नहीं होनी चाहिए।
ब्रायन ब्रूगमैन

क्या यह सुरक्षित है?
अमीरहोसिन

@TechJS pyftpdlib टीएलएस (RFC 4217) पर ftp का समर्थन करता है।
ब्रायन ब्रुगमैन

@BrianBruggeman सुरक्षित न होने का मतलब है कि मैं इंटरनेट पर एफ़टीपी उजागर नहीं कर रहा हूं, अनायास ही कुछ नहीं कर रहा हूं और अपना डेटा चोरी नहीं कर रहा हूं, मेरा मतलब है कि उत्पादन वातावरण में उपयोग किए जाने के लिए स्रोत कोड पर्याप्त सुरक्षित है?
अमीरहोसिन

39

इसके बजाय आप एक-लाइन HTTP सर्वर का उपयोग क्यों नहीं करते ?

python -m SimpleHTTPServer 8000

HTTP पर वर्तमान कार्यशील निर्देशिका की सामग्री को पोर्ट 8000 पर सर्व करेगा।

यदि आप पायथन 3 का उपयोग करते हैं, तो आपको इसके बजाय लिखना चाहिए

python3 -m http.server 8000

देखें SimpleHTTPServer 2.x के लिए मॉड्यूल डॉक्स और http.server 3.x. के लिये दस्तावेज

वैसे, दोनों ही मामलों में पोर्ट पैरामीटर वैकल्पिक है।


29
मुझे नहीं लगता कि इससे वह फाइलें अपलोड कर सकता है।
रोमन प्लाज़ेल

2
कोई फिर से शुरू, एकल कनेक्शन, आदि
Bugmenot123

@ RomanPlášil यह होगा, बस एक और अंत xD पर सर्वर चलाने के लिए बस के रूप में यह है
Reishin

26

उपरोक्त उत्तर आपके पायथन वितरण को मान रहे थे कि "एक लाइनर पायथन फीटप" लक्ष्य को प्राप्त करने के लिए कुछ तृतीय-पक्ष पुस्तकालय होंगे, लेकिन @zio जो पूछ रहे थे, वह ऐसा नहीं है। इसके अलावा, SimpleHTTPServer में फ़ाइलों को डाउनलोड करने के लिए वेब ब्रॉसर शामिल है, यह जल्दी से पर्याप्त नहीं है।

अजगर से ही ftpd ऐसा नहीं कर सकते, लेकिन आप उपयोग कर सकते हैं netcat , nc:

ncमूल रूप से किसी भी यूनिक्स जैसे सिस्टम (यहां तक ​​कि एम्बेडेड सिस्टम) से एक अंतर्निहित टूल है, इसलिए यह " त्वरित और अस्थायी तरीके से स्थानांतरित करने के लिए" के लिए एकदम सही है ।

चरण 1, रिसीवर की तरफ, दौड़ें:

nc -l 12345 | tar -xf -

यह पोर्ट 12345 पर सुनेगा, डेटा की प्रतीक्षा कर रहा है।

चरण 2, प्रेषक पक्ष पर:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

आप pvस्थानांतरण की प्रगति की निगरानी के लिए बीच में भी डाल सकते हैं :

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

स्थानांतरण समाप्त होने के बाद, दोनों पक्ष ncअपने आप काम छोड़ देंगे, और काम पूरा हो जाएगा।


2
संभालने की बात ... आप मानते हैं कि ग्राहक यूनिक्स मशीनों के साथ tarऔर ncउपलब्ध होने जा रहे हैं । अगर यह विंडोज़ है तो क्या होगा?
jlh

16

Pyftpdlib उपयोगकर्ताओं के लिए। मुझे यह pyftpdlib वेबसाइट पर मिला। यह आपके फाइल सिस्टम के लिए लिखने की सुविधा के साथ गुमनाम एफ़टीपी बनाता है इसलिए कृपया उचित देखभाल के साथ उपयोग करें। बेहतर सुरक्षा के लिए हुड के नीचे और अधिक सुविधाएँ उपलब्ध हैं ताकि बस देखें:

sudo pip3 install pyftpdlib

python3 -m pyftpdlib -w  

## updated for python3 Feb14:2020

ऊपर पदावनत विधि का उपयोग करने की कोशिश करने वालों के लिए उपयोगी हो सकता है।

सूदो अजगर -म pyftpdlib.ftpserver


3
आप छोड़ सकते हैं sudoअगर आप एक venv में स्थापित
बाल्की

1
मत भूलो कि वहाँ v3 संस्करण है: pip3 install pyftpdlibऔर python3 -m pyftpdlib -w। मेरे लिए एक जादू की तरह काम किया।
रॉन क्लेन

3

इंस्टॉल:

pip install twisted

फिर कोड:

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

गहरा हो जाओ:

http://twistedmatrix.com/documents/current/core/examples/


3

सरल समाधान उपयोगकर्ता pyftpd लाइब्रेरी के लिए होगा। यह लाइब्रेरी आपको पायथन एफ़टीपी सर्वर को एक पंक्ति में स्पिन करने की अनुमति देती है। हालांकि यह डिफ़ॉल्ट रूप से स्थापित नहीं होता है, लेकिन हम इसे सरल एप कमांड का उपयोग करके स्थापित कर सकते हैं

apt-get install python-pyftpdlib

अब निर्देशिका से आप केवल पायथोड मॉड्यूल चलाना चाहते हैं

python -m pyftpdlib -p 21 

अच्छा लग रहा है, लेकिन प्रमाणीकरण किस तरह का होता है? मुझे "530 प्रमाणीकरण विफल हुए।"
गुफ्तगू

1

मैं एक लाइन एफ़टीपी सर्वर के बारे में नहीं जानता, लेकिन अगर आप करते हैं

python -m SimpleHTTPServer

यह 0.0.0.0:8000 पर एक एचटीटीपी सर्वर चलाएगा, जो वर्तमान डायरेक्टरी से फाइलें सेव करेगा। यदि आप एक वेब ब्राउज़र के साथ एक लिनक्स बॉक्स से फ़ाइलों को जल्दी से प्राप्त करने का एक तरीका खोज रहे हैं, तो आप इसे हरा नहीं सकते।


1
apt-get install python3-pip

pip3 install pyftpdlib

python3 -m pyftpdlib -p 21 -w --user=username --password=password

-w = write permission

-p = desired port

--user = give your username

--password = give your password

@ कारेल वे एक ही पुस्तकालय को कवर करते हैं, लेकिन वे मुझे डुप्लिकेट की तरह नहीं लगते हैं।
मार्क रोटेवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.