Como executo temporariamente um servidor FTP?

48

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

Estou procurando um servidor FTP básico, iniciado pelo usuário. Eu entendo que provavelmente teria que rodar com o sudo. Tudo bem - mas eu quero iniciar / parar como um programa normal.

Na plataforma Windows, essas ferramentas custam uma dúzia - eu uso o 3CDaemon há anos e encontrei recentemente o CoreFTP. Ambos são excelentes. Você configura um usuário, aponte-o para um diretório e pressione o botão "Iniciar". Alguns minutos depois, você geralmente termina e clica no botão "Stop". Tarefa concluída.

Essas ferramentas parecem não existir no Ubuntu. Eu encontrei um projeto do Google Code que cria uma instância TFTP razoavelmente bem (supondo que ela ainda funcione - eu não a uso há cerca de um ano e o python segue em frente), mas e o FTP? Alguma coisa lá fora?

Scaine
fonte
2
Pena que não tive tempo de terminar o JetFTP. Ele faz exatamente o que você descreve e pode ser executado sem privilégios de root (você precisaria usar uma porta> 1024, é claro). Ele sairá da caixa sem configuração e com uma boa interface gráfica também. Para ter uma idéia de como será, confira o JetHTTP , que é semelhante em design e interface.
Nathan Osman
Obrigado George, vou verificar isso também. Talvez o melhor de ambos possa ser combinado. Os primeiros dias para mim e para o python, por isso duvido que seja de muita ajuda por lá!
Scaine

Respostas:

53

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

  1. Instale com pip pip install --user pyftpdlib
  2. Corra com python -m pyftpdlib, adicione -wse você quiser acesso de gravação também.
  3. 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 FTPno diretório de trabalho atual em vez da sua casa. Digite python ftpserver.py --helppara obter informações sobre todas as opções.

  • faça o login em anonymous@localhost:2121/

texto alternativo

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=USERNAMEe --password=PASSWORD:

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

Mais uma vez, use --helppara ver todos eles.

Isso deve ser o mais fácil possível.


Eu também escrevi um pouco de gui para isso:

texto alternativo

  • 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 pyftpdlibe ftpserver.pymudou (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 <<<
...
Stefano Palazzo
fonte
Isso parece um módulo excelente - já que estou tentando aprender python, parece que este é um ótimo ponto de partida para criar uma GUI ... Tenho medo de não marcar isso como resposta (embora eu já votou) na esperança de que alguém saiba de uma ferramenta que já é baseada em GUI. Obrigado pelo aviso sobre isso e obrigado pela versão modificada.
Scaine
Obrigado :-) Não vou desistir de programar uma GUI agora. : P
Stefano Palazzo
1
Obrigado Stefano! Eu nunca esperava isso! Isso é ótimo - não apenas uma GUI para experimentar (hoje à noite), mas também um guia de ensino sobre como você as reuniu em primeiro lugar. Muito Obrigado!
Scaine
5
As pastas paste.ubuntu.com/542726 e paste.ubuntu.com/542852 estão mortas, infelizmente ... também, o ftpserver.py mudou e, aparentemente, o post acima não aguenta mais (a última revisão independente parece ser r1116 , com isso diff ). Eu fiz uma edição para o post com um novo roteiro (será invisível até peer review)
sdaau
1
apenas para o noob por aí, para usar o script acima, você precisará instalar a biblioteca "pyftpdlib", para executar ... "sudo apt-get install python-pip" e depois "pip install pyftpdlib" ... e tudo pronto!
D.Snap
1
  • Você pode usar o ftpd puro Instale o pure-ftpd

  • Você pode usar scp se você tem um servidor SSH.

karthick87
fonte
3
Iniciantes podem instalar um servidor Pure-FTPd em 5 minutos. Pode ser tão simples quanto instalar o pacote, digitando “pure-ftpd &” e ... isso é tudo. Você já possui um servidor em execução e os clientes podem começar a se conectar.
hhlp
1
Sim, eu aprecio que o Pure seja fácil, especialmente com o pacote da GUI pure-admin - eu o uso para o meu servidor FTP permanente. No entanto, com o PureFTP, você está / sempre / executando o FTP, que é um risco à segurança de um laptop que se conecta via WIFI. Não quero lembrar de ativar meu firewall e me preocupar com os (provavelmente pequenos) recursos que consome. Receio que o scp geralmente não seja uma opção, embora alguns dispositivos estejam melhorando - acho que as imagens F5 mais recentes usam scp, assim como o Call Manager da Cisco atualmente.
Scaine
2
Eu nem acho que você precisa iniciar o daemon PureFTP depois de instalar o pacote. (Eu pensei que era para ser iniciada pelo postinstscript no pacote.)
Nathan Osman
0

Para aqueles que copiam arquivos de e para roteadores, você pode experimentar esta ferramenta: tftpgui

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

A única coisa a ter em atenção é que o Ubunutu assume como padrão o Phython2, portanto a melhor maneira de iniciar o script é:

sudo python3 ./tftpgui.py

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

Bo

BO VESTERGAARD
fonte
2
Obrigado Bo - eu já havia mencionado essa ferramenta útil na minha pergunta. No entanto, eu queria algo como TFTPgui para FTP, o que não existia até Stefano finalizar seu python gui.
Scaine
pythons ftplib funciona bem em vez disso e é muito mais fácil de script se estiver lidando com muitos dispositivos (1k +)
lxx