Você pode obter um servidor FTP tão fácil quanto um dois três usando o pyftpdlib :
- Instale com o pip
pip install --user pyftpdlib
- Execute com
python -m pyftpdlib
, adicione-w
se você quiser também acessar o acesso. - não há etapa três:)
Agora você tem um servidor ftp no qual você pode efetuar login para compartilhar seu diretório pessoal anonimamente. Isso é mais 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 administrador, 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 de sua casa. Digite python ftpserver.py --help
para obter informações sobre todas as opções.
- faça login em
anonymous@localhost:2121/
Por favor, note que este software é liberado sob os termos da Licença MIT , o que significa que você pode faça basicamente o que você quiser com ele. Leia o texto da licença, são apenas algumas linhas e conheça os 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, adicionei esse recurso:
- faça o download da minha versão modificada
Você agora 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
Novamente, use --help
para ver todos.
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 ter 3999 linhas, mas ele fará tudo o que o original faz. E eu queria manter tudo em um arquivo. Quando é iniciado sem qualquer parâmetro (ou seja, torná-lo executável e clique duas vezes nele, ou cria um launcher para ele ), ele inicia um pouco de gui para você configurar seu servidor. Você ainda pode importá-lo como um módulo python ou usar a linha de comando acima.
Problemas conhecidos:
-
Eu não me incomodei com nada além da porta 2121. Isso deve ser simples, tornando a porta configurável requer um tratamento de erros complexo com o qual não quero que o usuário se incomode. 2121 deve sempre funcionar bem.
-
Ele não irá avisá-lo, como a linha de comando, sobre o uso de uma configuração insegura. Ou seja não definindo uma senha ou algo assim.
-
EDIT: desde que a API de pyftpdlib
e ftpserver.py
mudou (e os links pastebin do ubuntu desapareceram); 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 para:
$ 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 <<<
...