FTP e suas variações

  1. Modos de conexão
  2. Principais comandos
    1. Comandos gerais
    2. Comandos do modo de transferência
    3. Comandos de download e upload
    4. Comandos de diretórios
    5. Comandos locais
    6. Shell local
  3. SFTP e FTPS
  4. TFTP
  5. Deploy

FTP (File Transfer Protocol ou Protocolo de Transferência de Arquivo) é um protocolo usado para transferir arquivos entre um computador e outro, sendo que um é um cliente e o outro é um servidor. É possível baixar arquivos do servidor para o cliente (download) e também enviar arquivos do cliente para o servidor (upload).

Se você já trabalhou com criação de sites ou sistemas web, certamente em algum dia de sua vida já usou o protocolo FTP, embora ele não seja recomendado para o deploy, como falaremos adiante na seção Deploy. Para que o FTP possa ser usado, o computador cliente precisa ter um cliente FTP. Esse cliente pode ser tanto uma ferramenta de linha de comando, como um programa com interface gráfica (como o Filezilla, que é muito popular).

Programas como o Filezilla podem ser bem intuitivos, mas eles não deixam claro o que está acontecendo nos bastidores, e o usuário não precisa conhecer nenhum comando do protocolo FTP para usá-los. Já a linha de comando é exatamente o oposto: ela exige que você conheça os comandos FTP para usar o protocolo. E isso é ótimo para que você aprenda a usar o FTP. Por isso, a linha de comando vai ser usada nesse tutorial e nenhum programa gráfico será coberto aqui.

Diferentemente da maioria dos protocolos TCP/IP, o FTP usa duas portas: uma para transferência de dados e outra para comandos (também conhecida como porta de controle). A porta de comandos é a 21. Já a porta de dados depende muito do modo de conexão. Não vamos entrar em detalhes no processo de configuração que deve ser feito no servidor ou no cliente para usar o FTP, porque isso inclui etapas que estão fora do escopo dessa série de tutoriais de TCP/IP.

Modos de conexão

O FTP permite dois modos de conexão: passiva e ativa. Esses modos de conexão são vistos do ponto de vista do servidor FTP. Dessa forma, enquanto no modo de conexão ativa o servidor precisa se conectar ao cliente FTP, no modo de conexão passiva, o cliente se conecta ao servidor.

O modo passivo é muito mais natural e também é mais usado e mais suportado do que o modo ativo. Se você usar o modo ativo, vai ter que se certificar que o seu firewall não bloqueia as portas que o FTP usar. Isso geralmente exige que você configure o seu firewall, pois um comportamento comum nos firewalls é bloquear o tráfego que vem de fora para o seu computador. Se você usar o modo passivo, é o servidor que terá que se preocupar em deixar as portas usadas pelo FTP abertas, e isso é o mais comum.

Principais comandos

Vamos cobrir comandos do FTP que são usados em um sistema operacional baseado em UNIX. Praticamente todos os sistemas operacionais tem uma ferramenta de FTP de linha de comando, mas podem haver pequenas diferenças entre os comandos do seu sistema operacional e os comandos que forem listados aqui.

Primeiramente, faça login no seu servidor FTP:

ftp host_remoto

Digite suas credenciais de acesso FTP. Depois que você fizer isso, você verá o prompt ftp> e poderá rodar comandos FTP normalmente. Veja, a seguir, algumas listas de comandos que podem ser usados.

Comandos gerais

help
Retorna uma lista dos comandos FTP disponíveis.
bye/quit
Sai do FTP.
prompt
Serve para ativar o modo interativo, caso ele não esteja ativo, ou para desativá-lo, caso contrário.
delete
Remove um arquivo do servidor. Exemplo: delete img/card.png.
mdelete
Remove vários arquivos do servidor. Exemplo: mdelete temp/* (remove tudo o que está na pasta temp).

Se, ao usar os comandos que trabalham com múltiplos arquivos, você precisar sempre confirmar para que a ação seja feita, é porque você está no modo interativo. Para que essas confirmações parem de aparecer, basta desligar esse modo usando o comando prompt.

Modos de transferência

ascii
Define o modo de transferência como ASCII.
binary
Define o modo de transferência como binário (mais recomendado).

Download / Upload

get
Quando usado sem flags, faz o download de um arquivo do servidor FTP para o seu computador local. Exemplo: get foo (baixa o arquivo foo para o seu diretório local). Você pode também especificar o caminho do arquivo no seu computador local. Exemplos: get foo bar/baz (baixa o arquivo foo no diretório bar, renomeando o arquivo para baz).
put
Quando usado sem flags, faz o upload de um arquivo do seu computador local para o servidor FTP. Exemplos: put foo/bar.png envia o arquivo foo/bar.png para o servidor.
mget
Serve para baixar vários arquivos. Exemplos: mget images/* (baixa todos os arquivos do diretório images) e mget src/*.php (baixa todos os arquivos do diretório src que terminam com .php).
mput
Serve para upar vários arquivos. Exemplo: mput images/* (envia todos os arquivos do diretório images).

Você também pode usar o get e o put com múltiplos arquivos. Basta usar a flag -r. Exemplos: get -r assets/img e put -r src/.

Diretórios

cd
Muda o diretório atual para o diretório especificado. Exemplo: cd assets/img.
ls
Lista o conteúdo do diretório atual.
mkdir
Cria um novo diretório. Exemplo: mkdir temp.
pwd
Informa qual é o diretório atual.
rmdir
Remove o diretório especificado. O diretório precisa estar vazio. Exemplo: rmdir assets.

Comandos locais

lcd
muda o diretório atual do computador local para o diretório especificado. Exemplo: lcd assets/img.
lls
Lista o conteúdo do diretório atual do computador local.

Shell local

O comando ! coloca você em um shell local, de forma que você possa executar quaisquer comandos da linha de comando localmente, como date e nano foo.txt. Para retornar ao FTP, use o comando exit.

Se você quiser rodar apenas um comando no shell local, você pode colocá-lo após o ponto de exclamação. Dessa forma, você não sai da sessão do FTP. Exemplo: !date.

SFTP e FTPS

Os protocolos SFTP e FTPS são variantes do protocolo FTP. Enquanto o SFTP nada mais é do que o protocolo FTP com SSH, o FTPS é FTP com SSL. Como ele usa SSL, ele requer um certificado SSL para ser usado. Até por conta dessa limitação, o protocolo SFTP é mais usado e também é um protocolo muito seguro. É muito recomendado que você use um dos dois, ao invés do FTP, porque o FTP não usa nenhuma criptografia. Isso faz com que seus dados possam ser facilmente interceptados e lidos enquanto trafegam pela rede.

Para usar o protocolo SFTP, você precisa usar o programa de linha de comando sftp. A forma de se conectar é bem semelhante ao SSH, até porque a autenticação também é feita usando SSH:

sftp username@remote_hostname_or_IP

TFTP

O TFTP (Trivial File Transfer Protocol / Protocolo de Transferência de Arquivo Trivial) é um protocolo para transferir arquivos mais simples do que o FTP. Ele tem algumas diferenças claras em relação ao FTP:

  • ele funciona sobre o protocolo UDP, enquanto o FTP funciona sobre o protocolo TCP.
  • ele não tem autenticação.
  • ele é usado na porta 69, por padrão.

O TFTP também tem um programa de linha de comando para ele em muitos sistemas operacionais, o tftp.

Deploy

Apesar de ser muito importante conhecer o protocolo FTP, não é recomendado usá-lo para fazer o deploy dos seus sites ou sistemas. Para fazer deploys, é recomendado um processo mais automatizado, que seja menos suscetível a erros. Por exemplo, uma boa alternativa é usar uma task de deploy do Grunt. Assim, você define o que você quer fazer em cada deploy e o processo é feito de forma automática. Isso diminui muito a chance de ter problemas. Usar o FTP não é recomendado mesmo que seja feito de forma automática, por meio de um script. Alternativas como o rsync são mais recomendadas.