SFTP
O que é SFTP?
SFTP significa SSH File Transfer Protocol. Ele é um protocolo usado para enviar, baixar, listar, renomear e remover arquivos em um servidor remoto de forma segura.
Ele funciona sobre o SSH, normalmente usando a porta 22, e criptografa a comunicação entre cliente e servidor.
SFTP é a mesma coisa que FTP?
Não.
O FTP tradicional envia dados sem criptografia, podendo expor usuário, senha e arquivos.
O SFTP usa SSH, então os dados trafegam criptografados. Ele é mais seguro e recomendado para transferência de arquivos pela internet.
Como o SFTP funciona?
O SFTP funciona usando uma conexão SSH entre o cliente e o servidor.
Fluxo básico:
- O cliente tenta se conectar ao servidor.
- O servidor solicita autenticação.
- O usuário informa senha ou chave SSH.
- Após autenticar, o cliente pode navegar nas pastas remotas.
- Arquivos podem ser enviados, baixados, renomeados ou excluídos.
Exemplo:
sftp usuario@servidor.comPara que o SFTP é usado?
O SFTP é usado para transferir arquivos com segurança.
Exemplos comuns:
- Enviar arquivos de um site para o servidor.
- Fazer backup de arquivos.
- Baixar logs de servidores.
- Transferir documentos entre empresas.
- Automatizar envio de arquivos por scripts.
- Gerenciar arquivos em servidores Linux.
Como configurar o SFTP no servidor?
A configuração principal fica no arquivo:
/etc/ssh/sshd_configPara editar:
sudo nano /etc/ssh/sshd_configVerifique se existe a linha:
Subsystem sftp /usr/lib/openssh/sftp-serverOu, em algumas distribuições:
Subsystem sftp internal-sftpDepois de alterar, reinicie o SSH:
sudo systemctl restart sshComo criar um usuário para SFTP?
sudo adduser usuario_sftpDefinir senha:
sudo passwd usuario_sftpDepois, o usuário já poderá acessar:
sftp usuario_sftp@ip_do_servidorComo usar SFTP com chave SSH?
Gerar uma chave SSH:
ssh-keygen -t ed25519 -C "usuario@servidor"Copiar a chave para o servidor:
ssh-copy-id usuario@servidorConectar:
sftp usuario@servidorTambém é possível informar uma chave específica:
sftp -i ~/.ssh/minha_chave usuario@servidorComo limitar um usuário somente ao SFTP?
É possível bloquear acesso ao shell e permitir apenas SFTP.
No arquivo:
/etc/ssh/sshd_configExemplo:
Match User usuario_sftp
ChrootDirectory /home/usuario_sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding noDepois reinicie:
sudo systemctl restart sshAtenção: o diretório usado em ChrootDirectory precisa ter permissões corretas, geralmente pertencendo ao root.
Qual porta o SFTP usa?
Por padrão, o SFTP usa a porta:
22/TCPSe o servidor SSH estiver configurado em outra porta, o SFTP também usará essa porta.
Exemplo com porta 2222:
sftp -P 2222 usuario@servidorSFTP usa TLS ou SSL?
Não.
SFTP usa SSH para criptografia.
Não deve ser confundido com FTPS, que é FTP com TLS/SSL.
Diferença entre SFTP, FTP e FTPS
| Protocolo | Segurança | Porta comum | Observação |
|---|---|---|---|
| FTP | Não criptografado | 21 | Antigo e inseguro |
| FTPS | Usa TLS/SSL | 21 ou 990 | FTP com criptografia |
| SFTP | Usa SSH | 22 | Mais comum em servidores Linux |
Erros comuns no SFTP
Permission denied
Erro:
Permission deniedPossíveis causas:
- Usuário ou senha incorretos.
- Chave SSH errada.
- Usuário sem permissão na pasta.
- Acesso bloqueado no servidor.
Soluções:
ls -ld /caminho/da/pastaAjustar dono:
sudo chown usuario:usuario /caminho/da/pastaAjustar permissões:
sudo chmod 755 /caminho/da/pastaConnection refused
Erro:
Connection refusedPossíveis causas:
- Serviço SSH parado.
- Porta errada.
- Firewall bloqueando.
- Servidor fora do ar.
Soluções:
sudo systemctl status sshsudo systemctl start sshVerificar porta:
sudo ss -tulpn | grep sshNo route to host
Erro:
No route to hostPossíveis causas:
- IP incorreto.
- Servidor desligado.
- Problema de rede.
- Firewall bloqueando conexão.
Teste:
ping ip_do_servidorHost key verification failed
Erro:
Host key verification failedPossíveis causas:
- A chave do servidor mudou.
- O IP agora aponta para outro servidor.
- Registro antigo no arquivo
known_hosts.
Solução:
ssh-keygen -R ip_do_servidorDepois conecte novamente.
Couldn't canonicalize: Permission denied
Esse erro geralmente ocorre quando o usuário não tem permissão para acessar determinada pasta.
Verifique permissões:
ls -ld /pastaCorrija com:
sudo chown usuario:usuario /pasta
sudo chmod 755 /pastaChrootDirectory permission denied
Esse erro aparece quando o SFTP está configurado com ChrootDirectory, mas as permissões estão incorretas.
Regra comum:
sudo chown root:root /home/usuario_sftp
sudo chmod 755 /home/usuario_sftpDepois crie uma pasta interna para uploads:
sudo mkdir /home/usuario_sftp/uploads
sudo chown usuario_sftp:usuario_sftp /home/usuario_sftp/uploadsComo testar se o SFTP está funcionando?
Use:
sftp usuario@ip_do_servidorOu teste a porta:
nc -vz ip_do_servidor 22Também pode testar o SSH:
ssh usuario@ip_do_servidorSe o SSH funciona, normalmente o SFTP também funciona, desde que o subsistema SFTP esteja habilitado.
Comandos principais do SFTP
| Comando | Função |
|---|---|
ls | Lista arquivos remotos |
lls | Lista arquivos locais |
pwd | Mostra pasta remota atual |
lpwd | Mostra pasta local atual |
cd | Entra em pasta remota |
lcd | Entra em pasta local |
put arquivo | Envia arquivo |
get arquivo | Baixa arquivo |
mkdir pasta | Cria pasta remota |
rm arquivo | Remove arquivo remoto |
rename antigo novo | Renomeia arquivo remoto |
exit | Sai do SFTP |
Exemplo completo de uso
sftp usuario@192.168.0.10Dentro do SFTP:
pwd
ls
cd uploads
put arquivo.txt
ls
exitEsse exemplo conecta ao servidor, entra na pasta uploads, envia o arquivo arquivo.txt e encerra a sessão.
Boas práticas de segurança
- Usar chave SSH em vez de senha.
- Desativar login direto do root.
- Usar permissões corretas nas pastas.
- Usar firewall para liberar apenas portas necessárias.
- Manter o OpenSSH atualizado.
- Criar usuários separados para cada finalidade.
- Limitar usuários SFTP com
ChrootDirectoryquando necessário. - Usar senhas fortes caso senha seja permitida.