Come posso eseguire temporaneamente un server FTP?


48

Nel mondo di Ubuntu, sembra che tu abbia sempre un server FTP o non lo fai mai . Forse sono il primo analista di rete che deve eseguire il flashing di un'immagine Cisco, Checkpoint o Nokia usando Ubuntu ... Ho bisogno di un server FTP per forse 5 minuti, niente di più.

Sto cercando un server FTP avviato dall'utente. Capisco che probabilmente dovrebbe funzionare con sudo. Va bene, ma voglio avviarlo / interromperlo come un normale programma.

Sulla piattaforma Windows, tali strumenti sono una dozzina: ho usato 3CDaemon per anni e ho recentemente trovato CoreFTP. Entrambi sono eccellenti. Si configura un utente, lo si punta su una directory, quindi si preme il pulsante "Start". Un paio di minuti dopo, generalmente hai finito e premi il pulsante "Stop". Lavoro fatto.

Tali strumenti non sembrano esistere su Ubuntu. Ho trovato un progetto Google Code che crea un'istanza TFTP abbastanza bene (supponendo che funzioni ancora - non l'ho usato da circa un anno e Python è passato), ma che ne dici di FTP? Qualcosa là fuori?


2
Peccato che non ho avuto il tempo di finire JetFTP. Fa esattamente quello che descrivi e può essere eseguito senza i privilegi di root (ovviamente dovresti usare una porta> 1024). Si esaurirà senza alcuna configurazione e anche con una bella interfaccia grafica. Per avere un'idea di come sarà, controlla JetHTTP , che è simile nel design e nell'interfaccia.
Nathan Osman,

Grazie George, lo controllerò anch'io. Forse il meglio di entrambi può essere combinato. Primi giorni per me e Python, quindi dubito che sarò di grande aiuto lì!
Scaine,

Risposte:


53

È possibile far funzionare un server FTP con la stessa facilità di uno due tre usando pyftpdlib :

  1. Installa con pip pip install --user pyftpdlib
  2. Esegui con python -m pyftpdlib, aggiungi -wse vuoi anche l'accesso in scrittura.
  3. non c'è nessun passaggio tre :)

Ora hai un server ftp al quale puoi accedere per condividere in modo anonimo la tua home directory. Questo è inteso più come un test del modulo, ma fa quello che dice sulla scatola.

Questo comando:

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

servirà, senza privilegi di root, sulla porta 2121 e garantirà l'accesso in scrittura a utenti anonimi. Utilizzerà anche la directory FTPnella directory di lavoro corrente anziché a casa tua. Digitare python ftpserver.py --helpper ottenere informazioni su tutte le opzioni.

  • accedi a anonymous@localhost:2121/

testo alternativo

Si noti che questo software è rilasciato in base ai termini della Licenza MIT , il che significa che è possibile fare praticamente tutto ciò che si desidera con esso. Leggi il testo della licenza, sono solo poche righe e conosci i tuoi diritti.


Ora, questo script non supporta nome utente e password come parte della sua funzionalità autonoma (per motivi di sicurezza immagino).

Quindi ho aggiunto quella funzione:

Ora hai, oltre a tutte le opzioni che ho citato, i parametri della riga di comando

--username=USERNAMEe --password=PASSWORD:

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

Ancora una volta, usa --helpper vederli tutti.

Questo dovrebbe essere facile come si arriva.


Ho anche scritto una piccola GUI per questo:

testo alternativo

  • Scaricalo qui (aggiornato alla rev.6)

    Mi dispiace è lungo 3999 righe, ma farà tutto ciò che fa l'originale. E volevo tenere tutto in un unico file. Quando viene avviato senza alcun parametro (ovvero rendilo eseguibile e fai doppio clic su di esso o crea un programma di avvio per esso ), avvia una piccola interfaccia per configurare il tuo server. Puoi comunque importarlo come modulo Python o usare la fu della riga di comando sopra.

    Problemi noti:

    • Non mi sono preoccupato di nient'altro che la porta 2121. Questo dovrebbe essere semplice, rendere la porta configurabile richiede una complessa gestione degli errori che non voglio che l'utente si preoccupi. 2121 dovrebbe sempre funzionare bene.

    • Non ti avvertirà, come fa la riga di comando, sull'uso di una configurazione non sicura. Non sto impostando una password o qualcosa del genere.


EDIT: poiché l'API di pyftpdlibe ftpserver.pycambiato (ei collegamenti Ubbin Pasbin sono spariti); la maggior parte dei post sopra non funziona più. Per la versione (2014) di pyftpdlib, utilizzare questo script ( ftpserver-cli.py) per ottenere lo stesso come sopra:

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

chiama con:

$ 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 <<<
...

Sembra un modulo eccezionale - dal momento che sto cercando di imparare Python, sembra che questo sia un ottimo punto di partenza per costruire una GUI in giro ... Temo che non lo segnerò come risposta (anche se l'ho votato) nella speranza che qualcuno sappia di uno strumento che è già basato sulla GUI. Grazie per il testa a testa su questo e grazie per la versione modificata.
Scaine,

Grazie :-) Non mi arrenderò, programmando una GUI per questo ora. : P
Stefano Palazzo

1
Grazie Stefano! Non me lo sarei mai aspettato! Questo è fantastico - non solo una GUI da provare (stasera), ma anche un po 'di una guida didattica su come l'hai messa insieme in primo luogo. Grazie molto!
Scaine,

5
paste.ubuntu.com/542726 e paste.ubuntu.com/542852 sono morti, sfortunatamente ... anche, ftpserver.py è cambiato, e apparentemente il post sopra non regge più (l'ultima revisione standalone sembra essere r1116 , con questo diff ). Ho apportato una modifica al post con una nuova sceneggiatura (sarà invisibile fino alla revisione tra pari)
sdaau

1
solo per il noob là fuori, per utilizzare lo script sopra è necessario installare la libreria "pyftpdlib", per farlo eseguire ... "sudo apt-get install python-pip" e quindi "pip install pyftpdlib" ... e siete pronti!
D.Snap

1
  • Puoi usare pure-ftpd Installa pure-ftpd

  • Puoi usare scp se hai un server ssh.


3
I principianti possono installare un server Pure-FTPd in ​​5 minuti. Può essere semplice come installare il pacchetto, digitando "pure-ftpd &" e ... tutto qui. Hai già un server in esecuzione e i client possono iniziare a connettersi.
hhlp,

1
Sì, apprezzo che Pure sia facile, soprattutto con il pacchetto gui pure-admin: lo uso per il mio server FTP permanente. Tuttavia, con PureFTP, sei / sempre / esegui FTP, che è un rischio per la sicurezza con un laptop che si connette tramite WIFI. Non voglio ricordarmi di accendere il mio firewall e preoccuparmi delle (probabilmente minuscole) risorse che consuma. Temo che scp di solito non sia un'opzione, anche se alcuni dispositivi stanno migliorando: penso che le ultime immagini F5 utilizzino scp, così come il Call Manager di Cisco in questi giorni.
Scaine,

2
Non penso nemmeno che sia necessario avviare il demone PureFTP dopo aver installato il pacchetto. (Ho pensato che avrebbe dovuto essere avviato dalla postinstsceneggiatura nel pacchetto.)
Nathan Osman,

0

Per coloro che copiano file da e verso i router potresti provare questo strumento: tftpgui

Ha funzionato per me ed è molto facile da configurare. È anche uno script Python ma fa tftp invece di ftp. Tutto quello che devi fare è installare python-tk e scaricare lo script

L'unica cosa da tenere presente è che Ubunutu utilizza Phython2 per impostazione predefinita, quindi il modo migliore per avviare lo script è:

sudo python3 ./tftpgui.py

È quindi possibile configurarlo nella GUI. quando hai finito premi exit e basta.

Bo


2
Grazie Bo - avevo già menzionato questo utile strumento nella mia domanda. Tuttavia, volevo qualcosa di simile a TFTPgui per FTP, che non esisteva fino a quando Stefano non ha messo fine alla sua interfaccia Python.
Scaine,

pythons ftplib invece funziona bene ed è molto più facile da scrivere se si tratta di molti dispositivi (1k +)
lxx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.