Gerenciador de Contas para o Comando FTP no Linux

 

O comando FTP no Linux é muito útil, principalmente quando você já está editando um arquivo no Vi e  deseja enviar o arquivo para o servidor no mesmo momento. Fazendo todo o processo em modo texto um tempo enorme pode ser economizado, pois você não perde o tempo trocando de telas dando cliques com o mouse para abrir um cliente FTP etc...

ftp-linux

Para quem trabalha e oferece suporte à vários sites (como é o meu caso) utilizar o comando FTP no shell é um pouco chato, pois sempre temos que informar o endereço do servidor, usuário e senha. Este problema poderia ser minimizado caso você criei um arquivo chamado de .netrc no seu diretório home com o seguinte conteúdo:

machine linkDoMeuFtp.com.br login MeuLogin password MinhaSenha

Lembrando  que este arquivo deve ter permissão 600 e o dono do arquivo deve ser o mesmo usuário que está utilizando o comando FTP, isto é necessário por questões de segurança! Com este arquivo você digita o comando ftp seguindo pelo endereço do servidor ftp que o programa entrará com o usuário e senha de forma automática. Quando você quiser acessar o ftp normalmente  com uma conta diferente você entra com o comando:

ftp -n 

O ftp por padrão sempre procura o arquivo .netrc e utiliza ele caso existir. O que o comando acima faz é dizer para o comando ftp ignorar este arquivo. Bom tudo isso é muito legal, mas existem 2 problemas:

  1. O primeiro problema é que você ainda precisa digitar o nome do host (machine), somente usuário e senha são preenchidos automaticamente.
  2. O segundo problema é que o arquivo .netrc aceita somente uma configuração ftp! Ou seja caso você for um programador que precisa acessar vários sites ao longo do dia o .netrc não serve para nada!

Solução: Um Gerenciador de Contas para o Comando FTP no Linux

Em face dos problemas mencionados acima criei um pequeno ShellScript que faz o gerenciamento das contas de vários sites sendo que ao executar o mesmo ele mostra todas as contas FTP cadastradas e pergunta qual você deseja utilizar. Ao selecionar o número/ID referente a conta o script já realiza toda a conexão com o servidor ftp e entrega o terminal para você enviar ou gerenciar seus arquivos. Veja o exemplo:

comando-ftp-linux2     O pequeno script acima consulta um arquivo no mesmo diretório chamado de hosts.list, este arquivo contém todas as contas dos sites que você acessa. Sempre que você precisar acessar um site novo, uma nova entrada deve ser adicionada neste arquivo. Veja a estrutura do mesmo: [code language="text"] 1 * machine LinkdoMeuFTP1.com.br login usuario1 password senha1 2 * machine LinkdoMeuFTP2.com.br login usuario2 password senha2 [/code] Você pode dar uma permissão de leitura 600 neste arquivo para deixar ele mais protegido evitando que outros usuários do seu computador vejam. O ShellScript (ftpx.sh) que faz toda esta mágica está abaixo: [code language="bash"] #!/bin/bash echo -e '\n<<<<< FTPX >>>>>\n' echo -e 'Autor: Carlos Silva <carlosedasilva@gmail.com>\n' echo -e 'Contas disponíveis para conexão:\n' cat hosts.list echo read -p 'Qual host você deseja conectar? ' SELECTED echo -e "\n\nO host escolhindo foi $SELECTED\n\n" echo -e "conectando...\n\n" awk "NR==$SELECTED{print;exit}" hosts.list | cut -c5-10000 > $HOME/.netrc chmod 600 $HOME/.netrc MYHOST=`cat $HOME/.netrc` host=$(echo $MYHOST | awk '{split($0,a," "); print a[2]}') ftp $host [/code]

Lembrando que você precisa dar permissão de execução neste script. Bom o script está acima e funciona bem mas precisa ser melhorado na linha 16 onde utilizo o comando cut, pois acredito que o awk possa fazer todo o serviço, sugestões? Eu poderia dar uma melhorada no script mas em razão do tempo não continuei. Como o script supre as minhas necessidades acredito que possa ser útil para outras pessoas que precisam de algo parecido.