Você pode obter um servidor FTP tão fácil quanto um dois três usando pyftpdlib :
- Instale com pip
pip install --user pyftpdlib
- Corra com
python -m pyftpdlib
, adicione -w
se você quiser acesso de gravação também.
- não há passo três :)
Agora você tem um servidor ftp no qual pode fazer login para compartilhar anonimamente seu diretório pessoal. Isso significa mais como um teste do módulo, mas faz o que diz na lata.
Este comando:
python -m pyftpdlib --directory=FTP --port=2121 --write
servirá, sem privilégios de root, na porta 2121 e concederá acesso de gravação a usuários anônimos. Ele também usará o diretório FTP
no diretório de trabalho atual em vez da sua casa. Digite python ftpserver.py --help
para obter informações sobre todas as opções.
- faça o login em
anonymous@localhost:2121/
Observe que este software é lançado sob os termos da Licença MIT , o que significa que você pode fazer basicamente o que quiser com ele. Leia o texto da licença, são apenas algumas linhas e conheça seus direitos.
Agora, esse script não suporta nome de usuário e senha como parte de sua funcionalidade autônoma (por motivos de segurança, imagino).
Então eu adicionei esse recurso:
Agora você tem, além de todas as opções que mencionei, os parâmetros da linha de comando
--username=USERNAME
e --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Mais uma vez, use --help
para ver todos eles.
Isso deve ser o mais fácil possível.
Eu também escrevi um pouco de gui para isso:
Faça o download aqui (atualizado na rev. 6)
Sinto muito, são 3999 linhas, mas fará tudo o que o original faz. E eu queria manter tudo em um arquivo. Quando é iniciado sem nenhum parâmetro (por exemplo, torne-o executável e clique duas vezes nele, ou crie um iniciador para ele ), ele inicia um pequeno guia para você configurar seu servidor. Você ainda pode importá-lo como um módulo python ou usar a linha de comando acima fu.
Problemas conhecidos:
Eu não me incomodei com nada além da porta 2121. Isso deve ser simples, tornar a porta configurável requer um tratamento complexo de erros, com o qual não quero que o usuário se preocupe. 2121 deve sempre funcionar bem.
Ele não avisará, como a linha de comando, sobre o uso de uma configuração insegura. Ou seja, não estou definindo uma senha ou algo assim.
EDIT: desde que a API pyftpdlib
e ftpserver.py
mudou (e os links do ubuntu pastebin se foram); a maior parte do post acima não funciona mais. Para a versão (2014) de pyftpdlib
, use este script ( ftpserver-cli.py
) para obter o mesmo que acima:
#!/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()
ligue com:
$ 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 <<<
...