Post

Transferência Segura de Arquivos com SCP, SFTP e Rsync

Transferência Segura de Arquivos com SCP, SFTP e Rsync

Nota: Este é o sexto tutorial da série sobre SSH. Se você perdeu o anterior sobre como simplificar conexões com ~/.ssh/config, pode encontrá-lo aqui: Simplificando Conexões com ~/.ssh/config.

Além de fornecer acesso seguro ao shell remoto, uma das funcionalidades mais utilizadas do SSH é a capacidade de transferir arquivos de forma segura entre máquinas. Protocolos antigos como o FTP são inerentemente inseguros, transmitindo dados e credenciais em texto claro. O SSH oferece alternativas robustas que encapsulam a transferência de arquivos dentro do seu túnel criptografado.

Neste tutorial, exploraremos as três ferramentas mais comuns para transferência segura de arquivos sobre SSH: scp, sftp e rsync.

1. scp (Secure Copy): Simples e Direto

O scp é provavelmente a ferramenta mais simples para transferir arquivos sobre SSH. Sua sintaxe é muito semelhante ao comando cp local, mas permite especificar hosts remotos.

Sintaxe Básica:

  • Copiar arquivo local para remoto:
    1
    
    scp [opções] /caminho/do/arquivo/local <usuario>@<host_remoto>:/caminho/no/servidor/
    
  • Copiar arquivo remoto para local:
    1
    
    scp [opções] <usuario>@<host_remoto>:/caminho/do/arquivo/remoto /caminho/local/
    
  • Copiar arquivo entre dois hosts remotos (passando pelo local):
    1
    
    scp [opções] <user1>@<host1>:/path/file1 <user2>@<host2>:/path/destination/
    

Flags Comuns:

  • -P <porta> (Maiúsculo!): Especifica a porta SSH do host remoto, se não for a padrão 22. (Note que é -P maiúsculo no scp, diferente do -p minúsculo no ssh).
  • -r (Recursivo): Essencial para copiar diretórios inteiros e seu conteúdo.
  • -v (Verboso): Mostra informações de debug, útil para solucionar problemas.
  • -i /caminho/chave: Especifica a chave privada a ser usada para autenticação.
  • -l <limite_kbps>: Limita a largura de banda utilizada.
  • -C (Compressão): Habilita a compressão durante a transferência, útil em redes lentas, mas consome mais CPU.

Exemplos Práticos:

  • Copiar local_file.txt para o diretório /remote/path/ no Servidor KVM:
    1
    2
    3
    
    scp local_file.txt user_kvm@192.168.0.254:/remote/path/
    # Ou usando o alias do ~/.ssh/config:
    # scp local_file.txt kvm-server:/remote/path/
    
  • Copiar o diretório local_dir/ inteiro para o home do usuário user_eve na VM EVE-NG (usando alias e ProxyJump configurados no Tutorial 5):
    1
    
    scp -r local_dir/ eve-ng-vm:~
    
  • Copiar o arquivo /var/log/syslog do Servidor KVM para o diretório atual local:
    1
    
    scp kvm-server:/var/log/syslog .
    
  • Copiar um arquivo do Servidor KVM para a VM EVE-NG:
    1
    
    scp kvm-server:/path/to/file eve-ng-vm:/destination/path/
    

Vantagens do scp: Simples, sintaxe familiar (similar ao cp), bom para transferências rápidas de arquivos ou diretórios únicos. Desvantagens do scp: Menos eficiente que rsync para transferir arquivos grandes ou múltiplos arquivos que já existem parcialmente no destino, não possui modo interativo, protocolo considerado um pouco mais antigo e menos flexível que SFTP.

2. sftp (SSH File Transfer Protocol): Sessão Interativa

O sftp oferece uma experiência mais interativa, semelhante a um cliente FTP tradicional, mas operando inteiramente sobre a conexão SSH segura. Ele permite navegar pelos sistemas de arquivos local e remoto, transferir múltiplos arquivos, criar diretórios, remover arquivos, etc., tudo dentro de uma única sessão.

Iniciando uma Sessão:

1
2
3
sftp <usuario>@<host_remoto>
# Ou usando alias:
# sftp kvm-server

Após conectar e autenticar, você verá um prompt sftp>.

Comandos Comuns no Prompt sftp>:

  • Comandos Remotos (operam no servidor):
    • ls [opções] [caminho]: Lista arquivos e diretórios remotos.
    • cd <caminho>: Muda o diretório remoto.
    • pwd: Mostra o diretório remoto atual.
    • mkdir <nome_diretorio>: Cria um diretório remoto.
    • rm <arquivo>: Remove um arquivo remoto.
    • rmdir <diretorio>: Remove um diretório remoto vazio.
    • rename <antigo> <novo>: Renomeia um arquivo remoto.
  • Comandos Locais (operam na sua máquina):
    • Prefixados com l (de local).
    • lls [opções] [caminho]: Lista arquivos locais.
    • lcd <caminho>: Muda o diretório local.
    • lpwd: Mostra o diretório local atual.
    • lmkdir <nome_diretorio>: Cria um diretório local.
  • Transferência de Arquivos:
    • get <arquivo_remoto> [arquivo_local]: Baixa um arquivo do servidor para sua máquina.
    • put <arquivo_local> [arquivo_remoto]: Envia um arquivo da sua máquina para o servidor.
    • mget <padrão>: Baixa múltiplos arquivos que correspondem ao padrão (ex: mget *.txt).
    • mput <padrão>: Envia múltiplos arquivos locais.
  • Outros:
    • help ou ?: Mostra a lista de comandos disponíveis.
    • quit ou exit ou bye: Encerra a sessão sftp.

Exemplo de Sessão Interativa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Conectar ao Servidor KVM
sftp kvm-server
# sftp> 

# Listar arquivos remotos
# sftp> ls -l

# Mudar para o diretório /tmp remoto
# sftp> cd /tmp

# Listar arquivos locais
# sftp> lls

# Enviar um arquivo local chamado 'config.yaml' para /tmp remoto
# sftp> put config.yaml

# Baixar um arquivo remoto chamado 'server.log' para o diretório local atual
# sftp> get server.log

# Criar um diretório remoto
# sftp> mkdir backup_logs

# Sair da sessão
# sftp> quit

Vantagens do sftp: Modo interativo ótimo para explorar o sistema de arquivos remoto, transferir múltiplos arquivos seletivamente, gerenciar arquivos remotos (criar/remover/renomear). Desvantagens do sftp: Menos adequado para scripts de automação (embora possa ser usado com a flag -b <arquivo_batch>), não é tão eficiente quanto rsync para sincronização.

3. rsync sobre SSH: Sincronização Eficiente

O rsync é uma ferramenta extremamente poderosa e versátil para sincronizar arquivos e diretórios. Sua principal vantagem é o algoritmo delta-transfer, que permite copiar apenas as diferenças entre os arquivos de origem e destino, tornando-o muito eficiente para transferir arquivos grandes que já existem parcialmente no destino ou para manter diretórios sincronizados (backups incrementais).

Embora rsync seja uma ferramenta separada, ele pode usar SSH como seu “transporte” para realizar a sincronização de forma segura.

Sintaxe Básica (sobre SSH):

1
rsync [opções] <origem> <destino>

Onde <origem> e/ou <destino> podem ser locais ou remotos no formato <usuario>@<host>:<caminho>.

Opções Essenciais para Uso com SSH:

  • -e ssh: Especifica que o transporte a ser usado é o SSH. Embora muitas vezes seja o padrão se a origem/destino for remota, é bom incluir para clareza.
  • -a (Archive): Modo de arquivamento. É um atalho para um conjunto de opções comuns (-rlptgoD) que preservam permissões, propriedade (se possível), timestamps, links simbólicos, recursividade, etc. Quase sempre você vai querer usar -a.
  • -v (Verbose): Mostra quais arquivos estão sendo transferidos.
  • -z (Compress): Comprime os dados durante a transferência (similar ao -C do scp). Útil em redes lentas.
  • --progress: Mostra o progresso da transferência para cada arquivo (útil para arquivos grandes).
  • --delete: CUIDADO! Esta opção faz com que arquivos no destino que não existem na origem sejam apagados. Essencial para criar um espelho exato, mas perigoso se usado incorretamente.
  • --exclude=<padrão>: Exclui arquivos que correspondem ao padrão.
  • --include=<padrão>: Inclui arquivos que correspondem ao padrão (útil em conjunto com --exclude).
  • -n ou --dry-run: MUITO ÚTIL! Simula a execução sem fazer nenhuma alteração real. Use isso para verificar o que o rsync faria antes de executar o comando de verdade, especialmente com --delete.

Exemplos Práticos:

  • Sincronizar o diretório local ~/projetos/web para /var/www/html no Servidor KVM (espelhamento, apagando arquivos extras no destino):
    1
    2
    3
    4
    5
    
    # Primeiro, simular:
    rsync -avzn --delete ~/projetos/web/ kvm-server:/var/www/html/
        
    # Se a simulação parecer correta, executar de verdade:
    rsync -avz --delete ~/projetos/web/ kvm-server:/var/www/html/
    

    Nota a barra / no final de ~/projetos/web/: isso significa “copiar o *conteúdo do diretório”, não o diretório em si. Sem a barra, ele criaria /var/www/html/web/.*

  • Fazer backup do diretório home remoto do user_eve na VM EVE-NG para um diretório local ~/backups/eve-ng/:
    1
    
    rsync -avz --progress eve-ng-vm:~/ ~/backups/eve-ng/
    

    Na próxima vez que você rodar este comando, ele copiará apenas os arquivos novos ou modificados.

  • Copiar um único arquivo grande com progresso:
    1
    
    rsync -avz --progress kvm-server:/path/to/large_backup.tar.gz .
    

Vantagens do rsync: Extremamente eficiente para sincronização e backups incrementais (algoritmo delta), muitas opções para controle fino, preserva atributos de arquivo. Desvantagens do rsync: Sintaxe pode ser um pouco mais complexa devido ao grande número de opções, a ordem das barras (/) na origem/destino é significativa e pode confundir iniciantes.

Qual Ferramenta Usar?

  • Para copiar rapidamente um ou poucos arquivos/diretórios simples: scp é muitas vezes suficiente e fácil de usar.
  • Para explorar o sistema de arquivos remoto, baixar/enviar múltiplos arquivos seletivamente em uma sessão: sftp é ideal.
  • Para sincronizar diretórios, fazer backups incrementais, transferir arquivos grandes eficientemente ou quando a preservação de atributos é importante: rsync sobre SSH é a ferramenta mais poderosa e recomendada.

Na prática, muitos administradores e desenvolvedores acabam usando rsync para a maioria das tarefas de transferência devido à sua eficiência e flexibilidade, mas scp e sftp ainda têm seu lugar para tarefas mais simples ou interativas.

Conclusão

Transferir arquivos de forma segura é uma parte essencial do trabalho com sistemas remotos. O SSH nos fornece ferramentas excelentes para isso, cada uma com seus pontos fortes: scp para simplicidade, sftp para interatividade e rsync para eficiência e sincronização.

Compreender como e quando usar cada uma dessas ferramentas permitirá que você mova seus dados pela rede com segurança e eficiência.

No próximo tutorial, mergulharemos em um dos recursos mais poderosos e flexíveis do SSH: Túneis e Redirecionamento de Portas (Port Forwarding), que nos permitem acessar serviços de rede remotos como se estivessem rodando localmente, e vice-versa.

This post is licensed under CC BY 4.0 by the author.