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
- Simplicidade: Usa uma sintaxe muito semelhante ao comando Unix padrão
cp. - Velocidade: Frequentemente rápido para cópias simples únicas, embora o desempenho dependa da implementação SSH, cifra, rede e conjunto de arquivos.
- 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
scppor 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
- Sessão Interativa: As transferências ocorrem dentro de uma sessão de shell interativa dedicada.
- Robustez: Suporta busca, retomada e gerenciamento de transferências individuais dentro da sessão.
- 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). - 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.