Como faço para executar temporariamente um servidor FTP?

43

No mundo do Ubuntu, parece que você sempre executa um servidor FTP ou nunca faz. Talvez eu seja o primeiro analista de rede que precisou exibir uma imagem da Cisco, Checkpoint ou Nokia usando o Ubuntu ... Eu preciso de um servidor FTP por talvez 5 minutos, não mais que isso.

Estou à procura de um servidor FTP simples e iniciado pelo usuário. Eu entendo que provavelmente teria que correr com o sudo. Tudo bem - mas eu quero começar / pará-lo como um programa normal.

Na plataforma Windows, essas ferramentas custam uma dúzia - usei 3CDaemon por anos e recentemente encontrei o CoreFTP. Ambos são excelentes. Você configura um usuário, aponta para um diretório e, em seguida, clica no botão "Iniciar". Alguns minutos depois, você geralmente termina e aperta o botão "Parar". Trabalho feito.

Tais ferramentas parecem não existir no Ubuntu. Eu encontrei um projeto do Google Code que cria uma instância do TFTP razoavelmente bem (supondo que ele ainda seja executado - eu não o usei em cerca de um ano e o python mudou), mas e quanto ao FTP? Alguma coisa aí fora?

    
por Scaine 12.12.2010 / 16:05

3 respostas

43

Você pode obter um servidor FTP tão fácil quanto um dois três usando o pyftpdlib :

  1. Instale com o pip pip install --user pyftpdlib
  2. Execute com python -m pyftpdlib , adicione -w se você quiser também acessar o acesso.
  3. 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 <<<
...
    
por Stefano Palazzo 12.12.2010 / 17:13
1
  • Você pode usar pure-ftpd

  • Você pode usar scp se tiver um servidor ssh.

por karthick87 12.12.2010 / 16:18
0

Para aqueles que copiam arquivos de e para roteadores, convém experimentar essa ferramenta: tftpgui

Funcionou para mim e é muito fácil de configurar. É também um script Python, mas faz tftp em vez de ftp. Tudo o que você precisa fazer é instalar o python-tk e baixar o script

A única coisa a ter em conta é que o padrão do Ubunutu é o Phython2, então a melhor maneira de iniciar o script é:

sudo python3 ./tftpgui.py

Você pode configurá-lo na GUI. quando você terminar, pressione exit e é isso.

Bo

    
por BO VESTERGAARD 19.12.2012 / 15:33

Tags