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:

  1. O cliente tenta se conectar ao servidor.
  2. O servidor solicita autenticação.
  3. O usuário informa senha ou chave SSH.
  4. Após autenticar, o cliente pode navegar nas pastas remotas.
  5. Arquivos podem ser enviados, baixados, renomeados ou excluídos.

Exemplo:

sftp usuario@servidor.com

Para 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_config

Para editar:

sudo nano /etc/ssh/sshd_config

Verifique se existe a linha:

Subsystem sftp /usr/lib/openssh/sftp-server

Ou, em algumas distribuições:

Subsystem sftp internal-sftp

Depois de alterar, reinicie o SSH:

sudo systemctl restart ssh

Como criar um usuário para SFTP?

sudo adduser usuario_sftp

Definir senha:

sudo passwd usuario_sftp

Depois, o usuário já poderá acessar:

sftp usuario_sftp@ip_do_servidor

Como 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@servidor

Conectar:

sftp usuario@servidor

Também é possível informar uma chave específica:

sftp -i ~/.ssh/minha_chave usuario@servidor

Como limitar um usuário somente ao SFTP?

É possível bloquear acesso ao shell e permitir apenas SFTP.

No arquivo:

/etc/ssh/sshd_config

Exemplo:

Match User usuario_sftp
    ChrootDirectory /home/usuario_sftp
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Depois reinicie:

sudo systemctl restart ssh

Atençã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/TCP

Se o servidor SSH estiver configurado em outra porta, o SFTP também usará essa porta.

Exemplo com porta 2222:

sftp -P 2222 usuario@servidor

SFTP 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

ProtocoloSegurançaPorta comumObservação
FTPNão criptografado21Antigo e inseguro
FTPSUsa TLS/SSL21 ou 990FTP com criptografia
SFTPUsa SSH22Mais comum em servidores Linux

Erros comuns no SFTP

Permission denied

Erro:

Permission denied

Possí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/pasta

Ajustar dono:

sudo chown usuario:usuario /caminho/da/pasta

Ajustar permissões:

sudo chmod 755 /caminho/da/pasta

Connection refused

Erro:

Connection refused

Possíveis causas:

  • Serviço SSH parado.
  • Porta errada.
  • Firewall bloqueando.
  • Servidor fora do ar.

Soluções:

sudo systemctl status ssh
sudo systemctl start ssh

Verificar porta:

sudo ss -tulpn | grep ssh

No route to host

Erro:

No route to host

Possíveis causas:

  • IP incorreto.
  • Servidor desligado.
  • Problema de rede.
  • Firewall bloqueando conexão.

Teste:

ping ip_do_servidor

Host key verification failed

Erro:

Host key verification failed

Possí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_servidor

Depois 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 /pasta

Corrija com:

sudo chown usuario:usuario /pasta
sudo chmod 755 /pasta

ChrootDirectory 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_sftp

Depois crie uma pasta interna para uploads:

sudo mkdir /home/usuario_sftp/uploads
sudo chown usuario_sftp:usuario_sftp /home/usuario_sftp/uploads

Como testar se o SFTP está funcionando?

Use:

sftp usuario@ip_do_servidor

Ou teste a porta:

nc -vz ip_do_servidor 22

Também pode testar o SSH:

ssh usuario@ip_do_servidor

Se o SSH funciona, normalmente o SFTP também funciona, desde que o subsistema SFTP esteja habilitado.


Comandos principais do SFTP

ComandoFunção
lsLista arquivos remotos
llsLista arquivos locais
pwdMostra pasta remota atual
lpwdMostra pasta local atual
cdEntra em pasta remota
lcdEntra em pasta local
put arquivoEnvia arquivo
get arquivoBaixa arquivo
mkdir pastaCria pasta remota
rm arquivoRemove arquivo remoto
rename antigo novoRenomeia arquivo remoto
exitSai do SFTP

Exemplo completo de uso

sftp usuario@192.168.0.10

Dentro do SFTP:

pwd
ls
cd uploads
put arquivo.txt
ls
exit

Esse 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 ChrootDirectory quando necessário.
  • Usar senhas fortes caso senha seja permitida.