Como copiar arquivos entre VPS com SCP e Rsync — guia prático

Aprenda a copiar arquivos entre VPS, da máquina local ou entre servidores remotos usando SCP e Rsync com exemplos práticos e flags úteis.

Transferir arquivos entre servidores via terminal é uma das operações mais comuns no dia a dia de quem administra uma VPS. Seja pra subir código em produção, mover backups entre regiões ou migrar dados entre máquinas, SCP e Rsync são as ferramentas padrão — ambas rodam sobre SSH e não exigem instalação de daemon extra na maioria dos casos.

A escolha entre as duas raramente é “qual é melhor” e mais frequentemente “qual encaixa no cenário”. SCP brilha em transferências pontuais simples, geralmente um arquivo ou diretório pequeno copiado uma vez. Rsync brilha em qualquer coisa recorrente, em volumes grandes ou onde a rede pode falhar e você precisa retomar.

Este guia mostra os comandos exatos pra três cenários: local → VPS, VPS → local e VPS → VPS. Tempo estimado de leitura e execução dos exemplos: 15-20 minutos.

Pré-requisitos

Antes de começar

Você precisa de acesso SSH funcional pra ambas as máquinas envolvidas. Se ainda não configurou chaves SSH, recomendo fazer isso antes — copiar arquivos digitando senha a cada conexão fica inviável rápido. Os exemplos assumem Linux ou macOS no cliente; no Windows, use WSL2 ou PowerShell com OpenSSH habilitado.

Dados técnicos típicos pra preencher nos comandos:

Usuário root ou seu usuário sudo
Porta SSH 22 (padrão)
Host IP ou hostname da VPS

Confirme acesso básico antes de tentar transferir:

ssh [email protected]

Se o login funciona sem solicitar senha (ou pede só a passphrase da chave), você está pronto.

Copiando com SCP — sintaxe básica

SCP segue o padrão scp [opções] origem destino. Origem ou destino podem ser locais (caminho normal) ou remotos (usuario@host:caminho).

01

Copie um arquivo local pra VPS:

scp ./backup.tar.gz [email protected]:/var/backups/

O ./backup.tar.gz é o arquivo local. O destino remoto é o diretório /var/backups/ na VPS. A barra final no destino é importante — sem ela, o arquivo seria renomeado pra backups.

02

Copie um diretório inteiro recursivamente:

scp -r ./meu-projeto [email protected]:/var/www/

A flag -r ativa modo recursivo. Sem ela, SCP recusa diretórios. O diretório meu-projeto será criado dentro de /var/www/ no destino.

03

Baixe um arquivo da VPS pra máquina local:

scp [email protected]:/var/log/nginx/access.log ./

A direção é definida pela ordem dos argumentos. O ./ indica o diretório atual no cliente.

04

Copie diretamente entre duas VPS usando a flag -3:

scp -3 [email protected]:/data/db.sql [email protected]:/tmp/

Sem -3, SCP tenta estabelecer SSH entre as duas VPS, o que exige que elas tenham chaves cadastradas uma na outra. Com -3, os dados passam pelo seu cliente local atuando como roteador — mais lento, mas funciona sem configuração extra.

Flags SCP úteis no dia a dia

  • -P 2222 — especifica porta SSH (P maiúsculo no SCP, diferente do -p minúsculo do SSH)
  • -p (minúsculo) — preserva timestamps e modos do arquivo original
  • -q — modo silencioso, suprime barra de progresso (útil em scripts)
  • -l 5000 — limita banda em kbit/s, evita saturar o link da VPS
  • -i ~/.ssh/chave_especifica — usa uma chave SSH específica em vez do padrão
SCP foi marcado como legado pelo OpenSSH

A partir do OpenSSH 9.0, o protocolo SCP usa SFTP por baixo dos panos por questões de segurança. Os comandos continuam funcionando identicamente, mas se ver mensagens sobre “protocolo legado”, saiba que não é erro — é informativo. Pra novas integrações, considere SFTP ou Rsync.

Copiando com Rsync — eficiência em volume

Rsync usa um algoritmo de diff que compara origem e destino bloco a bloco. Em uma sincronização repetida, transfere apenas o que mudou — ganho enorme em diretórios grandes.

01

Sincronize um diretório local pra VPS:

rsync -avz ./site/ [email protected]:/var/www/site/

As flags significam:

  • -a (archive): preserva permissões, donos, timestamps, links simbólicos, recursivo
  • -v (verbose): mostra arquivos sendo transferidos
  • -z (compress): comprime dados em trânsito, reduz banda em ~30-60% pra arquivos texto

Atenção à barra final na origem: ./site/ copia o conteúdo do diretório. Sem a barra (./site), copiaria o próprio diretório site pra dentro do destino, criando /var/www/site/site/.

02

Adicione barra de progresso e retomada automática:

rsync -avzP ./backup.tar.gz [email protected]:/backups/

A flag -P é atalho pra --partial --progress. Mostra velocidade, ETA e mantém arquivos parciais em caso de interrupção — basta rodar o mesmo comando novamente pra retomar.

03

Exclua diretórios desnecessários:

rsync -avzP \
  --exclude='node_modules' \
  --exclude='.git' \
  --exclude='*.log' \
  ./projeto/ [email protected]:/var/www/projeto/

Cada --exclude aceita padrões glob. Você pode também usar --exclude-from=arquivo.txt pra carregar uma lista de uma vez.

04

Sincronize entre duas VPS rodando o comando dentro de uma delas:

ssh [email protected] \
  "rsync -avzP /data/ [email protected]:/data/"

Aqui o Rsync roda dentro da vps1, evitando o gargalo de passar pelo seu cliente. Exige que vps1 tenha chave SSH cadastrada na vps2.

Use --dry-run antes de operações grandes

Adicione --dry-run (ou -n) pra simular a operação sem transferir nada. Combina bem com -v pra ver exatamente o que seria copiado e deletado. Essencial antes de usar --delete, que apaga no destino arquivos que não existem na origem.

Flags Rsync que economizam tempo

FlagO que faz
--deleteApaga no destino arquivos que sumiram da origem — sincronização real
--bwlimit=5000Limita banda em KB/s
--checksumCompara via checksum (mais lento, mais seguro que timestamp)
-e "ssh -p 2222"SSH em porta não-padrão
--numeric-idsPreserva uid/gid numericamente, útil em backups
--append-verifyRetoma arquivo parcial validando checksum dos blocos já enviados

Verificação após a transferência

Confirmar que os arquivos chegaram íntegros é parte do processo. Compare contagem e checksum.

01

Conte arquivos em origem e destino:

# Local
find ./projeto -type f | wc -l

# Remoto
ssh [email protected] "find /var/www/projeto -type f | wc -l"

Os números devem bater exatamente, descontando exclusões aplicadas.

02

Compare checksum de arquivo crítico:

# Local
sha256sum backup.tar.gz

# Remoto
ssh [email protected] "sha256sum /backups/backup.tar.gz"

Hashes idênticos confirmam integridade bit a bit.

Resolução de problemas

Permission denied (publickey)

Sua chave SSH não está sendo aceita. Verifique se a chave pública está em ~/.ssh/authorized_keys no servidor e se as permissões estão corretas (700 no diretório .ssh, 600 no arquivo). Teste com ssh -v usuario@host pra ver o handshake completo e identificar qual chave foi oferecida.

No space left on device

Destino sem espaço. Verifique com df -h no servidor e libere antes de tentar novamente. Rsync com --partial mantém o arquivo parcial, então retomar funciona depois que você libera espaço.

Connection timed out durante transferência longa

Conexão SSH expirou. Adicione ServerAliveInterval 60 no seu ~/.ssh/config ou use rsync -e "ssh -o ServerAliveInterval=60" pra mandar keepalives. Em transferências de horas, isso evita que NAT intermediário derrube a sessão.

Próximos passos

Com SCP e Rsync dominados, você cobre 90% das transferências do dia a dia. Pra ir adiante:

  • Configure chaves SSH com passphrase + agente SSH pra produtividade
  • Automatize backups com Rsync via cron, escrevendo no /etc/cron.d/
  • Explore rsnapshot pra backups incrementais com hardlinks
  • Considere SSHFS pra montar diretórios remotos como filesystem local
  • Pra transferências entre regiões geográficas distantes, avalie ferramentas como bbcp ou mbuffer que paralelizam streams

Se você está colocando isso em produção, uma VPS Hostini já vem com SSH endurecido por padrão e link de rede dimensionado pra sustentar transferências sustentadas sem throttle — útil tanto pra deploy quanto pra backups recorrentes.

Perguntas frequentes

Qual a diferença prática entre SCP e Rsync?

SCP copia tudo de uma vez sem comparar o destino — simples, mas reenvia o arquivo inteiro se você rodar de novo. Rsync compara origem e destino bloco a bloco, transfere só o diff e suporta retomada. Pra arquivos pequenos e únicos, SCP é mais rápido de digitar. Pra diretórios grandes ou sincronização recorrente, Rsync ganha sempre.

Posso copiar arquivos de uma VPS direto pra outra sem passar pelo meu computador?

Sim. Tanto SCP quanto Rsync aceitam origem e destino remotos na mesma linha, ex: `scp user1@vps1:/path/file user2@vps2:/path/`. O cliente local atua como intermediário de controle, mas os dados podem trafegar diretamente se você usar `-3` no SCP ou rodar o comando dentro de uma das VPS via SSH.

Como retomar uma transferência Rsync interrompida?

Use as flags `--partial --append-verify`. O `--partial` mantém o arquivo parcial no destino, e o `--append-verify` retoma de onde parou validando o checksum dos blocos já enviados. Combinado com `-P` (que é `--partial --progress`), você tem retomada e barra de progresso.

É seguro copiar com a flag --exclude pra ignorar pastas grandes?

Sim, e é recomendado. Sempre exclua `node_modules`, `vendor`, `.git`, `*.log` e caches que podem ser reconstruídos no destino. Exemplo: `rsync -avz --exclude='node_modules' --exclude='.git' src/ dest/`. Reduz drasticamente o volume transferido sem perder integridade do projeto.

Por que minha transferência SCP está extremamente lenta?

SCP usa cifra AES-128-CTR por padrão, que é segura mas custosa em CPU. Em VPS com link rápido e CPU limitada, o gargalo vira a criptografia. Teste `scp -c [email protected]` ou troque pra Rsync sobre SSH, que tem compressão (`-z`) e protocolo mais eficiente em arquivos múltiplos.

Como copiar arquivos preservando permissões e donos?

No SCP, use a flag `-p` pra preservar timestamps e modos. No Rsync, use `-a` (modo arquivo), que já inclui preservação de permissões, donos, grupos, timestamps e links simbólicos. Pra preservar uid/gid numericamente em vez de mapear por nome, adicione `--numeric-ids` no Rsync.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp