O Protocolo SFTP: Uma Comparação com o FTP Tradicional

Hugo Guilherme Lutz Nascimento Gomes
TOTVS Developers
Published in
4 min readJul 2, 2024

O SFTP (SSH File Transfer Protocol) é um protocolo de rede que fornece transferência de arquivos e manipulação de dados sobre um canal seguro. Ele foi projetado como uma extensão do SSH (Secure Shell), oferecendo segurança e funcionalidade aprimoradas em comparação com o FTP (File Transfer Protocol) tradicional.

Comparação entre SFTP e FTP

Vantagens do SFTP

  1. Segurança: O SFTP utiliza criptografia SSH para proteger a transferência de dados, o que garante que as informações enviadas e recebidas não possam ser interceptadas ou modificadas por terceiros. O FTP, por outro lado, transmite dados em texto claro, tornando-os vulneráveis a ataques de interceptação.
  2. Autenticação: O SFTP oferece métodos de autenticação mais seguros, incluindo a autenticação com chaves públicas e privadas, além do uso de senhas. O FTP tradicional geralmente depende apenas de autenticação por senha, o que é menos seguro.
  3. Integridade dos Dados: SFTP inclui verificações de integridade dos dados, garantindo que os arquivos não sejam corrompidos durante a transferência. O FTP não possui essas verificações nativas, podendo resultar em dados corrompidos sem que o usuário seja avisado.
  4. Firewall-Friendly: O SFTP opera sobre uma única porta (normalmente a porta 22), tornando-o mais amigável para atravessar firewalls e evitando problemas de configuração de rede. O FTP requer múltiplas portas, o que pode complicar a configuração de firewalls.

Desvantagens do SFTP

  1. Complexidade de Configuração: Configurar um servidor SFTP pode ser mais complexo, especialmente ao implementar autenticação por chave pública e privada ou configurar servidores SSH.
  2. Desempenho: Devido à criptografia, o SFTP pode ser mais lento do que o FTP em ambientes de alta carga de transferência de dados. No entanto, essa diferença de desempenho geralmente é compensada pela segurança adicional oferecida.

Exemplos de Uso

  • Transferência Segura de Arquivos Corporativos: Empresas utilizam o SFTP para transferir documentos confidenciais, como relatórios financeiros e informações pessoais de funcionários, garantindo a segurança dos dados durante o trânsito.
  • Hospedagem Web: Muitos serviços de hospedagem oferecem acesso SFTP para upload de arquivos de sites, permitindo que desenvolvedores transfiram arquivos com segurança.
  • Backups Remotos: SFTP é utilizado para realizar backups remotos seguros, onde dados críticos são transferidos para servidores externos ou em nuvem.

Uso de Certificados SSL para Login no SFTP

Embora o SFTP seja baseado em SSH e não diretamente em SSL/TLS, o conceito de autenticação com certificados pode ser utilizado. No contexto do SFTP, isso se refere à autenticação por chave pública e privada, onde:

  1. Geração de Chaves: O usuário gera um par de chaves (pública e privada) em seu sistema.
  2. Distribuição da Chave Pública: A chave pública é enviada ao servidor e adicionada ao arquivo ~/.ssh/authorized_keys do usuário.
  3. Autenticação: Ao conectar-se ao servidor SFTP, a chave privada é utilizada para autenticar a sessão, sem necessidade de senhas.

Esse método de autenticação é altamente seguro e elimina o risco de senhas fracas ou roubadas.

Exemplo de Código em TLPP para Conexão SFTP

A seguir, um exemplo para conectar-se a um servidor SFTP e listar arquivos no diretório remoto:

Exemplo de seção no Appserver.ini

[SFTP]
privatekey = D:\Keys\SFTPDEV_NEWER\withpass\id_rsa
publickey = D:\Keys\SFTPDEV_NEWER\withpass\id_rsa.pub
certpassword = segredo123

#include "totvs.ch"

// Valid Server Definitions
#define TSFTPUSER_NAME "sftpuser"
#define TTESTUSER_NAME "testuser"
#define TALIEN_USER "user"
#define SFTPUSER_PASSWORD "p@ssw0rdn0tencrypted"
#define TESTUSER_PASSWORD "meup@ssw0rdl0g1n"
#define REMOTE_SFTP_SERVER "servidor.totvs.com"
#define REMOTE_SFTP_SERVER_PORT "2222"

User Function sftp_class_manual_test01()

local ret1, ret2, nI

sftp1 = tSFTPClient():new()

//Método mais seguro com pares de chaves via certificado.
sftp1:cPrivateKeyFilePath := 'D:\\Keys\\SFTPDEV_NEWER\\withpass\\id_rsa'
sftp1:cPublicKeyFilePath := 'D:\\Keys\\SFTPDEV_NEWER\\withpass\\id_rsa.pub'
sftp1:cKeyFilePassword := 'segredo123'

ret1 = sftp1:ConnectPubKey(REMOTE_SFTP_SERVER,REMOTE_SFTP_SERVER_PORT,TALIEN_USER)

if (ret1 <> 0)
Conout("###### FAILED TO SFTP Connect with Certificate")
endif

aListFiles := sftp1:Directory("/home/alien")
if (Len(aListFiles) == 0)
conOut("###### Falha em listar os diretórios do servidor remoto")
return .F.
endif

nRet2 := sftp1:ReceiveFile("downloadedTLPP_OK.txt","./somefile.txt")
if (nRret2 <> 0)
ConOut("###### Falha em transferir um arquivo do servidor SFTP.")
return .F.
endif

conOut("### Lista de arquivos:")
For nI := 1 to len(aListFiles)
//Listar nome do arquivo encontrado (posição 1 do subarray)
conOut(aListFiles[nI][1])
Next

ret2 := sftp1:Disconnect()

if (ret2 <> 0)
Conout("###### FAILED TO SFTP Connect with Certificate")
endif

Return

Conclusão

O SFTP representa uma evolução significativa em relação ao FTP tradicional, oferecendo segurança robusta, integridade de dados e maior compatibilidade com firewalls. Embora a configuração possa ser mais complexa, os benefícios em segurança e confiabilidade tornam o SFTP uma escolha superior para muitas aplicações, desde a transferência de arquivos corporativos até backups remotos seguros. Utilizar autenticação baseada em chaves públicas e privadas cria uma camada adicional de segurança, eliminando os riscos associados às senhas.

Documentação
https://tdn.totvs.com/display/tec/tSFTPClient

Abraços Hugo Guilherme Gomes.

--

--

Hugo Guilherme Lutz Nascimento Gomes
TOTVS Developers

Dev na TOTVS - Departamento de Tecnologia. "Não confie, verifique..."