Como Transferir Arquivos com Segurança Usando SCP e SFTP com SSH

Transfira arquivos com segurança usando SCP e SFTP sobre SSH, incluindo comandos práticos, autenticação por chave e controles de acesso mais seguros no lado do servidor.

Como Transferir Arquivos com Segurança Usando SCP e SFTP com SSH

Transferir arquivos entre sistemas locais e remotos é um requisito fundamental da administração de sistemas e do desenvolvimento. No entanto, usar protocolos não criptografados como FTP padrão ou comandos R expõe dados sensíveis a interceptação e ataques. O protocolo Secure Shell (SSH) fornece dois métodos robustos e criptografados para transferência de arquivos: o Secure Copy Protocol (SCP) e o SSH File Transfer Protocol (SFTP).

Este guia explica quando usar SCP, quando usar SFTP e como evitar os erros comuns que tornam a transferência segura de arquivos menos segura na prática.

Entendendo a Base: SSH

Tanto o SCP quanto o SFTP utilizam SSH (normalmente executado na porta 22) como camada de transporte subjacente. Quando você inicia uma transferência usando qualquer um dos protocolos, o SSH primeiro estabelece um túnel seguro e criptografado entre o cliente e o servidor. Todos os dados, incluindo credenciais de autenticação e o conteúdo dos arquivos, são transmitidos através deste túnel, tornando ambos os métodos alternativas altamente seguras aos protocolos legados de transferência de arquivos.

Principais recursos fornecidos pela base SSH:

  • Criptografia: Todos os dados são criptografados de ponta a ponta.
  • Autenticação: Suporta tanto autenticação por senha quanto a autenticação por par de chaves pública/privada, muito mais segura.
  • Integridade: Usa hash criptográfico para garantir que os arquivos não sejam alterados durante a transferência.

Secure Copy Protocol (SCP)

O SCP é um protocolo de rede baseado no protocolo de cópia remota (rcp), mas envolvido com a segurança do SSH. Ele é projetado para simplicidade e velocidade, sendo ideal para transferências rápidas e não interativas, especialmente em scripts ou automação.

Recursos e Características do SCP

  1. Simplicidade: Usa uma sintaxe muito semelhante ao comando Unix padrão cp.
  2. Velocidade: Frequentemente rápido para cópias simples únicas, embora o desempenho dependa da implementação SSH, cifra, rede e conjunto de arquivos.
  3. Não Interativo: Uma vez iniciado, a transferência é executada até a conclusão, sem a capacidade de gerenciar a sessão ou interromper o estado da transferência.

Comandos Práticos de SCP

A sintaxe geral do SCP é scp [opções] [origem] [destino].

1. Copiando um Arquivo do Local para o Servidor Remoto

Para enviar um arquivo local para o diretório home de um usuário remoto:

scp /caminho/para/arquivo_local.txt usuario@host_remoto:/home/usuario/destino/

2. Copiando um Arquivo do Remoto para o Sistema Local

Para baixar um arquivo do servidor para o seu diretório atual:

scp usuario@host_remoto:/var/log/system.log .
# Nota: O '.' indica o diretório local atual

3. Copiando um Diretório Inteiro (Recursivo)

Use a flag -r (recursiva) para copiar diretórios e todo o seu conteúdo:

scp -r /caminho/para/pasta_local/ usuario@host_remoto:/data/backups/

4. Especificando uma Porta Não Padrão

Se o seu daemon SSH estiver executando em uma porta diferente de 22, use a flag -P (observe o P maiúsculo):

scp -P 2222 arquivo_local.zip usuario@host_remoto:/tmp/

Nota sobre SCP: O comportamento do protocolo SCP tradicional tem um histórico de riscos no tratamento de nomes de arquivos e caminhos. Alguns clientes OpenSSH modernos usam SFTP internamente para scp por padrão, mas nem todos os clientes ou servidores se comportam da mesma forma. Para novos fluxos de trabalho, prefira SFTP ou rsync sobre SSH, a menos que você precise especificamente de compatibilidade com SCP.

SSH File Transfer Protocol (SFTP)

O SFTP é um subsistema do SSH que fornece um ambiente interativo mais rico para gerenciamento de arquivos. Ao contrário do SCP, que é puramente uma ferramenta de cópia, o SFTP é um protocolo stateful que permite listar, excluir, renomear e criar diretórios através da mesma conexão protegida por SSH.

Recursos e Características do SFTP

  1. Sessão Interativa: As transferências ocorrem dentro de uma sessão de shell interativa dedicada.
  2. Robustez: Suporta busca, retomada e gerenciamento de transferências individuais dentro da sessão.
  3. Gerenciamento Completo: Permite listar (ls), mudar de diretório (cd) e manipular arquivos remotos e locais usando comandos de sessão (put, get, lcd, lmkdir).
  4. Segurança: Usa SSH para transporte e é o padrão preferido para transferências interativas modernas de arquivos.

Comandos Práticos de SFTP

1. Iniciando uma Conexão SFTP

Inicie uma sessão interativa para o servidor remoto:

sftp usuario@host_remoto

Se estiver usando uma porta específica:

sftp -P 2222 usuario@host_remoto

2. Comandos Interativos do SFTP

Uma vez conectado, você opera no ambiente remoto por padrão. Use comandos para gerenciar transferências e diretórios:

Comando Descrição Exemplo
ls Listar arquivos remotos ls -l
cd Mudar diretório remoto cd /var/www/html
put Enviar arquivo (Local para Remoto) put dados_locais.zip
get Baixar arquivo (Remoto para Local) get backup_servidor.tar.gz
lcd Mudar diretório local lcd /Users/eu/downloads
lpwd Imprimir diretório de trabalho local lpwd
mkdir Criar diretório remoto mkdir novo_projeto
quit Sair da sessão SFTP quit

Exemplo: Enviando e Baixando dentro de uma Sessão SFTP

$ sftp [email protected]
sftp> cd /data/backups
sftp> lcd /home/local/relatorios
sftp> put relatorio_diario.csv  # Envia o arquivo
Uploading relatorio_diario.csv to /data/backups/relatorio_diario.csv
relatorio_diario.csv                                  100% 512KB   4.3MB/s   00:00    
sftp> get configuracao.yaml  # Baixa um arquivo
Fetching /data/backups/configuracao.yaml to configuracao.yaml
configuracao.yaml                                    100% 20KB    1.1MB/s   00:00    
sftp> quit

SCP vs. SFTP: Escolhendo a Ferramenta Certa

Embora ambos os protocolos sejam seguros, eles atendem a diferentes necessidades operacionais:

Recurso Secure Copy Protocol (SCP) SSH File Transfer Protocol (SFTP)
Mecanismo Protocolo de cópia simples (Não Interativo) Protocolo de gerenciamento interativo de arquivos (Stateful)
Caso de Uso Transferências rápidas de arquivo único; scripts/automação. Transferências complexas; gerenciamento de diretórios; sessões interativas.
Velocidade Geralmente bom para cópias simples. Geralmente rápido o suficiente, com mais recursos de gerenciamento de arquivos.
Retomada Limitada; use outra ferramenta para comportamento robusto de retomada. Suporta operações de transferência mais controladas, mas o comportamento de retomada do cliente varia.
Status de Segurança Ferramenta de compatibilidade; o protocolo tradicional tem preocupações de design. Melhor padrão para transferência gerenciada de arquivos sobre SSH.

Quando usar SCP: Use SCP quando precisar de velocidade máxima para uma transferência de arquivo simples e estiver executando o comando dentro de um script onde a não interatividade é preferida.

Quando usar SFTP: Use SFTP para praticamente todas as transferências manuais de arquivos, quando precisar gerenciar vários arquivos, mudar de diretório ou precisar de robustez de sessão e recursos modernos de segurança.

Melhores Práticas para Transferências Seguras de Arquivos

Usar SCP ou SFTP é apenas o primeiro passo. A configuração de segurança adequada no servidor SSH é essencial para proteger o ambiente remoto.

1. Priorize a Autenticação por Chave SSH

A autenticação baseada em senha é vulnerável a ataques de força bruta. Sempre use pares de chaves SSH pública/privada para autenticar transferências de arquivos. O uso de chaves elimina o risco de comprometimento da senha durante transferências automatizadas ou manuais.

Gerando Chaves (se necessário):

ssh-keygen -t ed25519 -C "transferencia-arquivos"

Usando uma chave específica para transferência:

scp -i ~/.ssh/minha_chave_transferencia arquivo.txt usuario@host_remoto:/tmp/
# ou
sftp -i ~/.ssh/minha_chave_transferencia usuario@host_remoto

2. Desabilite o Login como Root

Nunca permita transferências diretas de arquivos usando o usuário root. As transferências devem sempre ser realizadas por uma conta de usuário dedicada e com privilégios baixos. Se for necessário acesso administrativo, os arquivos podem ser movidos para o local apropriado após a transferência usando sudo localmente na máquina remota.

3. Restrinja o Acesso usando ChrootDirectory (SFTP)

Para sistemas que fornecem acesso SFTP a usuários externos ou não confiáveis, implemente restrições ChrootDirectory no arquivo sshd_config. Isso prende o usuário SFTP em um diretório específico, impedindo-o de navegar pelo resto do sistema de arquivos.

Exemplo de configuração no /etc/ssh/sshd_config:

Match User usuario_sftp_externo
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. Limite as Permissões

Certifique-se de que a conta de usuário usada para transferências tenha apenas as permissões mínimas necessárias para sua tarefa (Princípio do Menor Privilégio). Se um usuário só precisa enviar arquivos para /data/uploads, certifique-se de que ele não possa excluir arquivos em /etc/config.

Conclusão

Use SFTP como padrão quando precisar navegar, enviar, baixar ou gerenciar arquivos interativamente. Use SCP para casos simples de compatibilidade onde você confia no servidor e entende o comportamento do cliente. Em ambos os casos, combine o comando com chaves SSH, contas de privilégio mínimo e permissões restritas de diretório.