Linux / Comando scp: copiar arquivos por SSH e conferir o destino

O comando scp copia arquivos entre o computador local e um servidor usando SSH. A ordem dos argumentos define a direção: primeiro vem a origem, depois o destino; o formato usuário@host:caminho identifica uma localização remota.

Desde o OpenSSH 9.0, o scp usa por padrão o SFTP, protocolo de transferência de arquivos sobre SSH. A opção -O seleciona explicitamente o protocolo SCP antigo quando uma necessidade de compatibilidade justifica isso. Confira a implementação instalada com man scp; distribuições podem oferecer versões e recursos diferentes.

Sintaxe e preparação

scp [opções] origem destino

Essa linha descreve a sintaxe; substitua os campos pelos arquivos e caminhos reais. No computador local, você precisa de um cliente scp. No servidor, precisa de acesso SSH, uma conta autorizada e, no modo padrão atual, suporte a SFTP. Confira a porta, as permissões de leitura na origem, de escrita no destino e o espaço disponível.

A chave de host identifica o servidor; a senha ou chave do usuário autentica a conta. Verifique a impressão digital do servidor por um canal confiável antes de aceitar uma chave desconhecida. O guia do comando ssh e da verificação da chave do servidor explica essa distinção. Não ignore um aviso de chave alterada apenas para conseguir copiar.

Os nomes server.example.com e server.example.test são ilustrativos. Troque o host, a conta e os caminhos pelos seus dados autorizados. Os exemplos abaixo usam caminhos de sistemas semelhantes ao Unix; a interpretação de caminhos locais depende do sistema e do shell.

Exemplos de envio, recebimento e diretórios

Enviar um arquivo local para o servidor: execute no diretório que contém report.txt. Neste exemplo, /home/alice/ deve ser um diretório remoto existente e acessível à conta alice. Um arquivo de mesmo nome no destino pode ser sobrescrito.

scp report.txt alice@server.example.com:/home/alice/

Receber um arquivo do servidor: a origem remota agora aparece primeiro. O ponto final representa o diretório local atual, que deve permitir escrita. Confira se já existe um report.txt local antes de executar.

scp alice@server.example.com:/home/alice/report.txt .

Copiar um diretório: -r inclui recursivamente o conteúdo de project/. Confira o tamanho total e o caminho de destino antes de iniciar. Segundo o manual do OpenSSH, a cópia recursiva segue links simbólicos encontrados durante a travessia; isso pode incluir dados além dos esperados.

scp -r project/ alice@server.example.com:/home/alice/

Escolher um destino que já é diretório e escolher um novo nome de destino podem produzir disposições diferentes. Confirme a estrutura esperada, em vez de presumir que uma barra final garante a mesma semântica de outras ferramentas de cópia.

Conferir a direção e o resultado

No comando seguinte, report.txt é a origem local e /tmp/report.txt é o arquivo remoto. A ordem origem–destino define o envio; os dois-pontos separam o host do caminho remoto. O diretório /tmp é apenas ilustrativo e pode ser limpo pelo sistema, portanto não representa um destino de backup durável.

scp report.txt user@server.example.test:/tmp/report.txt

O progresso pode aparecer durante a transferência, ou o comando pode terminar sem mensagem, conforme as opções e o contexto de execução. O scp termina com código de saída zero em caso de sucesso e maior que zero em caso de erro. Confira o código imediatamente no shell; uma linha de progresso isolada não comprova que a operação inteira terminou corretamente.

Depois da cópia, o comando ssh user@server.example.test 'ls -lh /tmp/report.txt' permite conferir o nome e o tamanho no servidor, se o acesso a esse comando estiver autorizado. Tamanhos iguais não comprovam identidade do conteúdo; quando isso for necessário, compare também hashes calculados com uma ferramenta confiável nas duas pontas. Não há uma saída de transferência real reproduzida neste artigo.

  1. Confirme a conta, a identidade do servidor e qual argumento é a origem e qual é o destino.
  2. Confira caminhos, arquivos existentes, permissões e espaço; preserve uma cópia dos dados importantes antes de sobrescrever.
  3. Execute a transferência e verifique o código de saída. Se houver falha, investigue a mensagem antes de repetir; pode haver um arquivo parcial no destino.
  4. Verifique no destino o arquivo e a estrutura copiada. Compare o conteúdo ou hashes quando a integridade exigir mais do que conferir nome e tamanho.

Opções principais

Opção Finalidade e condição
-r Copia diretórios recursivamente. No OpenSSH, segue links simbólicos encontrados; confira o conteúdo e o tamanho esperado.
-P porta Escolhe a porta SSH do servidor. É P maiúsculo; a porta precisa já estar disponível no servidor.
-i arquivo_chave Seleciona o arquivo de identidade para autenticação por chave pública. A configuração SSH e o agente também podem influenciar as identidades oferecidas.
-p Preserva os horários de modificação e acesso e os bits de modo, dentro das possibilidades do destino. Não equivale a preservar proprietário, listas de controle de acesso (ACLs) e todos os metadados de um backup.
-O Usa o protocolo SCP antigo, por exemplo para um servidor sem SFTP. Exige atenção à interpretação de caminhos pelo shell remoto.

A opção -P do scp corresponde à seleção de porta que o ssh faz com -p minúsculo. Informar outra porta no cliente não altera a configuração nem abre uma porta no servidor.

Cuidados com caminhos e transferências repetidas

Um arquivo local cujo nome contém dois-pontos pode ser confundido com uma especificação remota. O manual recomenda um caminho local explícito, relativo ou absoluto; por exemplo, o prefixo ./ pode desambiguar um nome relativo em um shell Unix. Para nomes com espaços, proteja o argumento segundo as regras do seu shell. Não aplique automaticamente exemplos de caminhos Unix a letras de unidade do Windows.

No protocolo antigo ativado por -O, a expansão de padrões depende do shell remoto e caracteres especiais exigem cuidado adicional com aspas. O modo SFTP tem regras diferentes: uma receita de aspas duplicadas criada para o protocolo antigo pode falhar no modo padrão. Use caminhos simples e explícitos sempre que possível; não troque de protocolo nem desative verificações de identidade para esconder um erro de caminho.

O scp pode sobrescrever arquivos e não cria automaticamente uma versão de segurança. Também não oferece a mesma interface de retomada nem a sincronização por diferenças de uma ferramenta dedicada. Para transferências grandes interrompidas ou sincronizações repetidas, avalie rsync, quando disponível nos ambientes envolvidos, escolhendo suas opções conforme a política de cópia. Igualar exclusões exige uma decisão explícita e pode apagar dados.

Na verificação deste artigo em 29 de outubro de 2026, foram executadas cópias locais com o scp do Git for Windows: cópia simples, sobrescrita de um arquivo descartável, cópia recursiva e preservação do horário de modificação passaram nas verificações de conteúdo ou horário correspondentes. A primeira tentativa não encontrou o programa local cp; a repetição funcionou após incluir o diretório do Git no PATH apenas do processo de teste. Cinco comandos dos exemplos passaram na análise de sintaxe do Bash. Esses testes não realizaram uma transferência SSH/SFTP, não verificaram permissões nativas do Linux e não comprovam acesso a um servidor remoto.

Pergunta frequente

A opção de porta do scp é -p?

Não. Use -P maiúsculo para selecionar a porta do servidor. O -p minúsculo preserva horários e bits de modo dos arquivos, conforme o suporte do destino.

Documentação oficial

Consulte o manual oficial do scp no OpenBSD para opções, caminhos e códigos de saída. As notas do OpenSSH 9.0 explicam a mudança do protocolo padrão para SFTP e as diferenças de expansão e aspas em relação ao protocolo antigo.