O SFTP (SSH File Transfer Protocol) é uma ferramenta interativa projetada para gerenciamento e transferência segura de arquivos, operando sobre o prtoocolo SSH. Diferente do FTP tradicional, todo o tráfego de dados, incluindo autenticação, é criptografado, garantidno a integridade e confidencialidade das informações.
Comparativo: SFTP vs FTP
| Característica | SFTP | FTP |
|---|---|---|
| Base de Protocolo | Integrado ao SSH | Protocolo autônomo |
| Segurança | Dados criptografados (senhas e arquivos protegidos) | Comunicação em texto puro (vulnerável a interceptação) |
| Portas de Rede | Porta 22 (padrão SSH) | Portas 20 e 21 (canal de controle e dados) |
| Autenticação | Mecanismos do SSH (chaves criptográficas ou senhas) | Usuário e senha em texto puro |
| Firewall | Simplificado (apenas uma porta necessária) | Complexo (exige configurações de modo ativo/passivo) |
Quando usar SFTP vs SCP
| Cenário | SFTP | SCP |
|---|---|---|
| Navegação | Permite explorar diretórios antes da transferência | Exige conhecimento prévio do caminho exato |
| Operações | Gestão de arquivos (renomear, apagar, mudar permissões) | Apenas cópia simples de arquivos |
| Interação | Sessão contínua e interativa | Comando único e isolado |
Estabelecendo Conexão
Para iniciar uma sessão interativa, o comando básico exige o usuário e o endereço do servidor remoto.
sftp admin@meuservidor.com
Caso o serviço SSH escute em uma porta alternativa, utilize o parâmetro -P (maiúsculo).
sftp -P 2200 admin@meuservidor.com
Para autenticação baseada em chaves, especifique o arquivo de chave privada com a flag -i.
sftp -i ~/.ssh/id_rsa_custom admin@meuservidor.com
Manipulação de Arquivos e Diretórios
Durante a sessão no prompt sftp>, você pode operar tanto no ambiente local quanto no remoto.
Comandos Locais
Para interagir com a máquina de origem, prefixe os comandos com a letra 'l' (local) ou utilize '!' para executar instruções arbitrárias do shell.
sftp> lls # Listar arquivos locais
sftp> lcd /dados/local # Navegar entre diretórios locais
sftp> lpwd # Exibir diretório local atual
sftp> !whoami # Executar comando shell local (ex: mostrar usuário)
sftp> !df -h # Verificar espaço em disco local
Comandos Remotos
A manipulação no servidor de destino utiliza a sintaxe padrão similar ao Linux.
sftp> ls # Listar conteúdo remoto
sftp> cd /var/logs_remotos # Mudar diretório remoto
sftp> mkdir novo_diretorio # Criar pasta remota
sftp> rm arquivo_antigo.txt # Remover arquivo remoto
sftp> chmod 644 config.cfg # Alterar permissões remotas
Mecanismos de Transferência de Dados
Transferência Unitária e em Lote
sftp> put documento.txt # Enviar um arquivo específico
sftp> get relatorio.pdf # Baixar um arquivo específico
sftp> mput *.csv # Upload de múltiplos arquivos usando curinga
sftp> mget *.tar.gz # Download de múltiplos arquivos
Cópia Recursiva de Diretórios
Para copiar uma estrutura inteira de pastas, adicione a flag -r.
sftp> put -r projeto_completo # Upload recursivo de diretório
sftp> get -r backup_remoto # Download recursivo de diretório
Preservação de Atributos e Retomada
O parâmetro -p (minúsculo na transferência de dados) preserva metadados como datas de modificação. Para retomar transferências interrompidas, utilize reput e reget.
sftp> put -p grande_arquivo.zip # Preservar timestamps no upload
sftp> reput dados_parciais.bin # Retomar upload interrompido
sftp> reget video_incompleto.mp4 # Retomar download interrompido
Automação e Modo Não-Interativo
Execução Direta de Comando Único
Embora seja possível passar um comando via stdin com a flag -b -, para transferências diretas o scp costuma ser mais eficiente.
echo "get /var/logs_remotos/sistema.log /dados/local/" | sftp -b - admin@meuservidor.com
# Alternativa recomendada para este caso específico:
scp admin@meuservidor.com:/var/logs_remotos/sistema.log /dados/local/
Processamento em Lote (Batch Scripting)
Para operações complexas, crie um arquivo de texto contendo a sequência de comandos e execute-o com a opção -b.
Conteúdo do arquivo automacao_sftp.txt:
cd /var/backups
lcd /mnt/arquivos_local
mget *.tar.gz
bye
Executando o script de automação:
sftp -b automacao_sftp.txt admin@meuservidor.com